Back | Home
الـ Path الحالي: /home/picotech/domains/instantly.picotech.app/public_html/public/uploads/../../app/EmailProvider
الملفات الموجودة في هذا الـ Path:
.
..
AmazonSmtp.php
ElasticApi.php
ElasticSmtp.php
MailGunApi.php
MailGunSmtp.php
SendEMail.php
SendGridApi.php
SendMailInterface.php
SendMailProcess.php
Sendmail.php
Smtp.php
SparkpostSmtp.php

مشاهدة ملف: AmazonSmtp.php

<?php

namespace App\EmailProvider;


use App\Models\MessageLog;
use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Log;

class AmazonSmtp implements SendMailInterface
{

    public function message($message){
        $this->message = $message;

        return $this;
    }

    public function from($from)
    {
        $this->from = $from;
        return $this;
    }
    public function from_name($from_name)
    {
        $this->from_name = $from_name;
        return $this;
    }
    public function reply_to($reply_to)
    {
        $this->reply_to = $reply_to;
        return $this;
    }
    public function to($to)
    {
        $this->to = $to;
        return $this;
    }

    public function subject($subject)
    {
        $this->subject = $subject;
        return $this;
    }

    public function body($body)
    {
        $this->body = $body;
        return $this;
    }

    public function files($files){
        $files  = json_decode($files);
        $files_arr = [];
        if ($files) {
            foreach ($files as $file) {
                $files_arr[] = $file;
            }
        }
        $this->files = $files_arr;
        return $this;
    }

    public function config($config){

        $this->config=$config;
        return $this;
    }

    public function process()
    {
        if($this->message){
            $this->message_log=MessageLog::updateOrCreate([
                'to'=>$this->message->to,
                'from'=>$this->message->from,
                'message_id'=>$this->message->id,
                'customer_id'=>$this->message->customer_id,
                'type'=>'sent',
            ],['status'=>'succeed','queue_id'=>$this->message->id]);
            $messageLog = $this->message_log;
        }

        try {
            $server = $this->config;
            if (isset($server) && isset($server->value)) {
                $messageLog->status='pending';
                $messageLog->save();

                $templateBody = replaceMessageBody($this->body, $this->message_log->campaign_id, $this->message_log->id);

                $config_value = json_decode($server->value);
                $config = array(
                    'driver' => 'smtp',
                    'host' => "$config_value->hostname",
                    'port' => "$config_value->port",
                    'from' => array('address' => $this->message->reply_to, 'name' => $this->message->from_name),
                    'encryption' => "$config_value->encryption_method",
                    'username' => "$config_value->username",
                    'password' => "$config_value->password",
                );
                Config::set('mail', $config);

                $SesClient = new SesClient([
                    'profile' => 'default',
                    'version' => '2010-12-01',
                    'region' => $config_value->region
                ]);


                $sender_email = $this->from;
                $recipient_emails = ["$this->to"];
                $configuration_set = 'ConfigSet';

                $subject = $this->subject;
                $plaintext_body = $templateBody;
                $html_body = $templateBody;

                $result = $SesClient->sendEmail([
                    'Destination' => [
                        'ToAddresses' => $recipient_emails,
                    ],
                    'ReplyToAddresses' => ["$this->reply_to"],
                    'Source' => $sender_email,
                    'Message' => [
                        'Body' => [
                            'Html' => [
                                'Charset' => 'UTF-8',
                                'Data' => $html_body,
                            ],
                            'Text' => [
                                'Data' => $plaintext_body,
                            ],
                        ],
                        'Subject' => [
                            'Data' => $subject,
                        ],
                    ],
                    // If you aren't using a configuration set, comment or delete the
                    'ConfigurationSetName' => $configuration_set,
                ]);
                if (isset($result) && isset($result['MessageId'])){
                    $messageLog->status='success';
                    $messageLog->save();
                }
            }
        } catch (AwsException $e) {
            $messageLog->status='failed';
            $messageLog->save();
            Log::info($e->getMessage());
        }
    }


    public function errors()
    {
        // TODO: Implement errors() method.
    }
}