Fix mail() transport for compatibility with SwiftMailer 6

This commit is contained in:
Kijin Sung 2018-10-18 15:03:14 +09:00
parent 1a8a248359
commit 8a36a49d37
2 changed files with 32 additions and 67 deletions

View file

@ -1,32 +0,0 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* This interface intercepts calls to the mail() function.
*
* @author Chris Corbyn
*/
interface Swift_Transport_MailInvoker
{
/**
* Send mail via the mail() function.
*
* This method takes the same arguments as PHP mail().
*
* @param string $to
* @param string $subject
* @param string $body
* @param string $headers
* @param string $extraParams
*
* @return bool
*/
public function mail($to, $subject, $body, $headers = null, $extraParams = null);
}

View file

@ -28,24 +28,12 @@ class Swift_Transport_MailTransport implements Swift_Transport
/** Additional parameters to pass to mail() */ /** Additional parameters to pass to mail() */
private $_extraParams = '-f%s'; private $_extraParams = '-f%s';
/** The event dispatcher from the plugin API */
private $_eventDispatcher;
/** An invoker that calls the mail() function */
private $_invoker;
/** /**
* Create a new MailTransport with the $log. * Create a new MailTransport with the $log.
*
* @param Swift_Transport_MailInvoker $invoker
* @param Swift_Events_EventDispatcher $eventDispatcher
*/ */
public function __construct(Swift_Transport_MailInvoker $invoker, Swift_Events_EventDispatcher $eventDispatcher) public function __construct()
{ {
@trigger_error(sprintf('The %s class is deprecated since version 5.4.5 and will be removed in 6.0. Use the Sendmail or SMTP transport instead.', __CLASS__), E_USER_DEPRECATED);
$this->_invoker = $invoker;
$this->_eventDispatcher = $eventDispatcher;
} }
/** /**
@ -70,6 +58,13 @@ class Swift_Transport_MailTransport implements Swift_Transport
{ {
} }
/**
* Not used.
*/
public function ping()
{
}
/** /**
* Set the additional parameters used on the mail() function. * Set the additional parameters used on the mail() function.
* *
@ -109,17 +104,10 @@ class Swift_Transport_MailTransport implements Swift_Transport
* *
* @return int * @return int
*/ */
public function send(Swift_Mime_Message $message, &$failedRecipients = null) public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null)
{ {
$failedRecipients = (array) $failedRecipients; $failedRecipients = (array) $failedRecipients;
if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) {
$this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed');
if ($evt->bubbleCancelled()) {
return 0;
}
}
$count = ( $count = (
count((array) $message->getTo()) count((array) $message->getTo())
+ count((array) $message->getCc()) + count((array) $message->getCc())
@ -173,11 +161,10 @@ class Swift_Transport_MailTransport implements Swift_Transport
$to = str_replace("\r\n.", "\r\n..", $to); $to = str_replace("\r\n.", "\r\n..", $to);
} }
if ($this->_invoker->mail($to, $subject, $body, $headers, $this->_formatExtraParams($this->_extraParams, $reversePath))) { if ($this->mail($to, $subject, $body, $headers, $this->_formatExtraParams($this->_extraParams, $reversePath))) {
if ($evt) { if ($evt) {
$evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS);
$evt->setFailedRecipients($failedRecipients); $evt->setFailedRecipients($failedRecipients);
$this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed');
} }
} else { } else {
$failedRecipients = array_merge( $failedRecipients = array_merge(
@ -190,7 +177,6 @@ class Swift_Transport_MailTransport implements Swift_Transport
if ($evt) { if ($evt) {
$evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED);
$evt->setFailedRecipients($failedRecipients); $evt->setFailedRecipients($failedRecipients);
$this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed');
} }
$message->generateId(); $message->generateId();
@ -208,24 +194,35 @@ class Swift_Transport_MailTransport implements Swift_Transport
*/ */
public function registerPlugin(Swift_Events_EventListener $plugin) public function registerPlugin(Swift_Events_EventListener $plugin)
{ {
$this->_eventDispatcher->bindEventListener($plugin);
} }
/** Throw a TransportException, first sending it to any listeners */ /** Throw a TransportException, first sending it to any listeners */
protected function _throwException(Swift_TransportException $e) protected function _throwException(Swift_TransportException $e)
{ {
if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) { throw $e;
$this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); }
if (!$evt->bubbleCancelled()) {
throw $e; /**
} * Send mail via the mail() function.
} else { *
throw $e; * This method takes the same arguments as PHP mail().
} *
* @param string $to
* @param string $subject
* @param string $body
* @param string $headers
* @param string $extraParams
*
* @return bool
*/
public function mail($to, $subject, $body, $headers = null, $extraParams = null)
{
return @mail($to, $subject, $body, $headers, $extraParams);
} }
/** Determine the best-use reverse path for this message */ /** Determine the best-use reverse path for this message */
private function _getReversePath(Swift_Mime_Message $message) private function _getReversePath(Swift_Mime_SimpleMessage $message)
{ {
$return = $message->getReturnPath(); $return = $message->getReturnPath();
$sender = $message->getSender(); $sender = $message->getSender();