Compare commits

..

8 Commits
dev ... master

Author SHA1 Message Date
Dave Mc Nicoll 1f61c964bc - Added setBCC and setCC methods to interface. 2024-06-03 21:53:31 -04:00
Dave Mc Nicoll fe6fdd3987 - Default value of bcc if nothing was provided 2023-11-01 11:33:38 -04:00
Dave Mc Nicoll b284b67d91 - Fixed some minor typos 2023-05-31 18:45:16 +00:00
Dave M. f0b2ab10fd Merge branch 'master' of https://git.mcnd.ca/mcndave/the-bugs 2023-05-22 16:04:36 +00:00
Dave M. cbfc87e12d - Migrating to SymfonyMailer from Swift 2023-05-22 16:03:46 +00:00
Dave M. 1e7ac5db47 - Changed Laminas namespace 2023-03-30 18:24:33 +00:00
Dave Mc Nicoll 34b850c780 Bugfixes made on the interface 2022-02-25 16:41:49 +00:00
Dave M. bee7e25935 - Work on SwiftMailer interface 2021-01-06 19:32:56 +00:00
6 changed files with 173 additions and 34 deletions

View File

@ -23,10 +23,12 @@ class EmailConfiguration
public $fromAddress = "";
public $fromName = "";
public $smtpVerifyPeer = false;
public function __construct($type = self::AUTH_TYPE_SMTP)
{
$this->type = $type;
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace TheBugs\Email;
trait EmailInfoTrait
{
protected /*stringable*/ $from;
protected string|\Stringable|array $to;
protected string|\Stringable|array $cc;
protected string|\Stringable|array $bcc;
protected array $attachments = [];
protected EmailConfiguration $emailConfiguration;
public function setFrom(string|\Stringable|array $from) : MailerInterface
{
$this->from = $from;
return $this;
}
public function setTo(string|\Stringable|array $to) : MailerInterface
{
$this->to = $to;
return $this;
}
public function setCC(string|\Stringable|array $cc) : MailerInterface
{
$this->cc = $cc;
return $this;
}
public function setBCC(string|\Stringable|array $bcc) : MailerInterface
{
$this->bcc = $bcc;
return $this;
}
}

View File

@ -6,7 +6,13 @@ interface MailerInterface
{
public function send(string $subject, string $message, bool $html = true) : bool;
public function setFrom($from) : self;
public function setFrom(string|\Stringable|array $from) : self;
public function setTo($to) : self;
public function attach(mixed $attachment) : self;
public function setTo(string|\Stringable|array $to) : self;
public function setBCC(string|\Stringable|array $bcc) : self;
public function setCC(string|\Stringable|array $cc) : self;
}

View File

@ -4,16 +4,10 @@ namespace TheBugs\Email;
class SwiftMailer implements MailerInterface
{
protected $emailConfiguration;
use EmailInfoTrait;
protected $transport;
protected $from;
protected $to;
protected $cc;
public function __construct(EmailConfiguration $configuration) {
$this->emailConfiguration = $configuration;
@ -28,30 +22,22 @@ class SwiftMailer implements MailerInterface
->setFrom( $this->from )
->setTo( $this->to )
->setCC($this->cc ?? [])
->setBCC($this->bcc ?? [])
->setBody( $message, $html ? 'text/html' : 'text/plain' );
foreach ($this->attachments as $attachment) {
$swiftObj->attach($attachment);
}
$this->attachments = [];
return ( new \Swift_Mailer($this->transport) )->send($swiftObj);
}
public function setFrom(/*stringable|array*/ $from) : MailerInterface
public function attach(mixed $attachment) : self
{
$this->from = $from;
return $this;
}
public function setTo(/*stringable|array*/ $to) : MailerInterface
{
$this->to = $to;
$this->attachments[] = $attachment;
return $this;
}
public function setCC(/*stringable|array*/ $cc) : MailerInterface
{
$this->cc = $cc;
return $this;
}
}

View File

@ -0,0 +1,99 @@
<?php
namespace TheBugs\Email;
use Symfony\Component\Mailer\{ Mailer, Transport };
use Symfony\Component\Mime\Email;
class SymfonyMailer implements MailerInterface
{
use EmailInfoTrait;
public Mailer $mailer;
public function __construct(EmailConfiguration $configuration) {
$this->emailConfiguration = $configuration;
if ($this->emailConfiguration->smtpUsername) {
$this->mailer = new Mailer(Transport::fromDsn(sprintf("smtp://%s:%s@%s:%d?verify_peer=%s", $this->emailConfiguration->smtpUsername, $this->emailConfiguration->smtpPassword, $this->emailConfiguration->smtpHost, $this->emailConfiguration->smtpPort, $this->emailConfiguration->smtpVerifyPeer ? 'true' : 'false')));
}
else {
$this->mailer = new Mailer(Transport::fromDsn(sprintf("smtp://%s:%d?verify_peer=%s", $this->emailConfiguration->smtpHost, $this->emailConfiguration->smtpPort, $this->emailConfiguration->smtpVerifyPeer ? 'true' : 'false')));
}
}
public function send(string $subject, string $message, bool $html = true) : bool
{
$email = ( new Email() )
->subject($subject)
->from(...$this->from())
->to(...$this->to())
->cc(...$this->cc())
->bcc(...$this->bcc());
if ($html) {
$email->html($message);
}
else {
$email->text($message);
}
foreach ($this->attachments as $path) {
$email->attachFromPath($path);
}
$this->attachments = [];
try {
$this->mailer->send($email);
}
catch(\Exception $e) {
return false;
}
return true;
}
public function attach(mixed $attachment) : self
{
$this->attachments[] = $attachment;
return $this;
}
protected function from() : array
{
return $this->arrayToAddress($this->from);
}
protected function to() : array
{
return $this->arrayToAddress($this->to);
}
protected function cc() : array
{
return $this->arrayToAddress($this->cc ?? []);
}
protected function bcc() : array
{
return $this->arrayToAddress($this->bcc ?? []);
}
protected function arrayToAddress(string|\Stringable|array $array) : array
{
$list = [];
foreach((array) $array as $addr => $name) {
if (is_numeric($addr)) {
$list[] = $name;
}
else {
$list[] = "$name <$addr>";
}
}
return $list;
}
}

View File

@ -9,10 +9,10 @@ use Psr\Http\Message\ResponseFactoryInterface,
Psr\Http\Server\MiddlewareInterface,
Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response,
Zend\Diactoros\ServerRequest,
Zend\Diactoros\Stream,
Zend\Diactoros\Uri;
use Laminas\Diactoros\Response,
Laminas\Diactoros\ServerRequest,
Laminas\Diactoros\Stream,
Laminas\Diactoros\Uri;
class JavascriptMiddleware implements MiddlewareInterface
{