dru5089
2014-10-31 12:08
采纳率: 0%
浏览 44
已采纳

在重定向之前使用SwiftMailer

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).

2条回答 默认 最新

相关推荐 更多相似问题