engelsystem/src/Mail/Transport/Transport.php

104 lines
2.5 KiB
PHP

<?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);
}
}