I have an issue regarding the use of SwiftMailer before a redirect. If I allow the controller making the request to return then emails are sent fine. For example:
function foo() {
// ...
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($sender)
->setTo($recipient)
->setBody(strip_tags($html))
->addPart($html, 'text/html');
$result = $this->app['mailer']->send($message);
return '';
}
The above works so long as I return a non-null response.
However if I do the same but with a redirect like this:
function foo() {
// ...
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($sender)
->setTo($recipient)
->setBody(strip_tags($html))
->addPart($html, 'text/html');
$result = $this->app['mailer']->send($message);
simpleredirect($this->app['paths']['root']);
}
Then the message is not sent.
Note: the simpleredirect()
function terminates the script, as is standard practice.
In both examples the $result
comes back as the number of specified recipients. Therefore I can only assume that the mail is queued and some kind of dispatch runs on a conventional return which is missed out in the presence of a redirect.
I have a feeling that the SwiftMailer spool
option might be enabled. However doing a few searches of my Bolt projects I cannot seem to find it being set anywhere. If spooling is enabled then the email won't be sent until the kernal termination phase, which the redirect (having die
will avoid).