diff options
Diffstat (limited to 'src/Mail/Transport')
-rw-r--r-- | src/Mail/Transport/LogTransport.php | 44 | ||||
-rw-r--r-- | src/Mail/Transport/Transport.php | 103 |
2 files changed, 147 insertions, 0 deletions
diff --git a/src/Mail/Transport/LogTransport.php b/src/Mail/Transport/LogTransport.php new file mode 100644 index 00000000..6e351302 --- /dev/null +++ b/src/Mail/Transport/LogTransport.php @@ -0,0 +1,44 @@ +<?php + +namespace Engelsystem\Mail\Transport; + +use Psr\Log\LoggerInterface; +use Swift_Mime_SimpleMessage as SimpleMessage; + +class LogTransport extends Transport +{ + /** @var LoggerInterface */ + protected $logger; + + public function __construct(LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients + * + * @param SimpleMessage $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send( + SimpleMessage $message, + &$failedRecipients = null + ): int { + $this->logger->debug( + 'Mail: Send mail "{title}" to "{recipients}":' . PHP_EOL . '{content}', + [ + 'title' => $message->getSubject(), + 'recipients' => $this->getTo($message), + 'content' => (string)$message->getHeaders() . PHP_EOL . PHP_EOL . $message->toString(), + ] + ); + + return count($this->allRecipients($message)); + } +} diff --git a/src/Mail/Transport/Transport.php b/src/Mail/Transport/Transport.php new file mode 100644 index 00000000..691faf60 --- /dev/null +++ b/src/Mail/Transport/Transport.php @@ -0,0 +1,103 @@ +<?php + +namespace Engelsystem\Mail\Transport; + +use Swift_Events_EventListener; +use Swift_Mime_SimpleMessage as SimpleMessage; +use Swift_Transport as SwiftTransport; + +abstract class Transport implements SwiftTransport +{ + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted(): bool + { + return true; + } + + /** + * Start this Transport mechanism. + */ + public function start() { } + + /** + * Stop this Transport mechanism. + */ + public function stop() { } + + /** + * Check if this Transport mechanism is alive. + * + * If a Transport mechanism session is no longer functional, the method + * returns FALSE. It is the responsibility of the developer to handle this + * case and restart the Transport mechanism manually. + * + * @example + * + * if (!$transport->ping()) { + * $transport->stop(); + * $transport->start(); + * } + * + * The Transport mechanism will be started, if it is not already. + * + * It is undefined if the Transport mechanism attempts to restart as long as + * the return value reflects whether the mechanism is now functional. + * + * @return bool TRUE if the transport is alive + */ + public function ping(): bool + { + return true; + } + + /** + * Register a plugin in the Transport. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) { } + + /** + * Returns a unified list of all recipients + * + * @param SimpleMessage $message + * @return array + */ + protected function allRecipients(SimpleMessage $message): array + { + return array_merge( + (array)$message->getTo(), + (array)$message->getCc(), + (array)$message->getBcc() + ); + } + + /** + * Returns a concatenated list of mail recipients + * + * @param SimpleMessage $message + * @return string + */ + protected function getTo(SimpleMessage $message): string + { + return $this->formatTo($this->allRecipients($message)); + } + + /** + * @param array $recipients + * @return string + */ + protected function formatTo(array $recipients) + { + $list = []; + foreach ($recipients as $address => $name) { + $list[] = $name ? sprintf('%s <%s>', $name, $address) : $address; + } + + return implode(',', $list); + } +} |