Viewing file: Smtp.php (3.26 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\EmailProvider;
use App\Models\MessageLog; use App\Models\SendingServer; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; use \App\Events\SendEMail; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mailer\Transport; use Symfony\Component\Mime\Crypto\DkimSigner; use Symfony\Component\Mime\Email; use Symfony\Component\Mime\Address;
class Smtp implements SendMailInterface { private $errors; private $message_id;
public function __construct($messageId) { $this->message_id=$messageId; //email_queues id $this->errors=[]; }
public function setFrom($from, $fromName) { $this->from = new Address($from, $fromName); return $this; } public function setReplyTo($reply_to) { $this->reply_to = $reply_to; return $this; } public function setTo($to) { $this->to = $to; return $this; }
public function setSubject($subject) { $this->subject = $subject; return $this; }
public function setBody($body) { $this->body = $body; return $this; }
public function setFiles($files){ $files = json_decode($files); $files_arr = []; if ($files) { foreach ($files as $file) { $files_arr[] = $file; } } $this->files = $files_arr; return $this; }
public function setConfig($config){
$this->config=$config; return $this; }
public function process() { try{ $server = $this->config; if(isset($server->from) && $server->from == 'smtp' && isset($server->value)) { $config_value = json_decode($server->value); /* smtp://username:password@host:port */ $transport = Transport::fromDsn("smtp://".urlencode($config_value->username).":".urlencode($config_value->password)."@".urlencode($config_value->hostname).":$config_value->port"); $mailer = new Mailer($transport); $email = (new Email()) ->from($this->from) ->to($this->to) ->replyTo($this->reply_to) ->priority(Email::PRIORITY_NORMAL) ->subject($this->subject) // ->text('This is an important message!') ->html($this->body); if(isset($config_value->dkim_private_key) && isset($config_value->dkim_domain) && isset($config_value->dkim_selector)){ $signer = new DkimSigner($config_value->dkim_private_key, $config_value->dkim_domain, $config_value->dkim_selector); $email = $signer->sign($email); } $mailer->send($email); } }catch (\Exception $ex){ if(config('app.debug')){ Log::info($ex->getMessage()); } $this->errors[]=[ 'id'=>$this->message_id, 'message'=>$ex->getMessage() ]; } return $this; } public function errors(){ return $this->errors; }
}
|