リダイレクト前の SwiftMailer の使用に関して問題があります。コントローラーがリクエストを返すことを許可すると、メールは正常に送信されます。例えば:
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 '';
}
上記は、null 以外の応答を返す限り機能します。
ただし、同じことを行うが、次のようなリダイレクトを使用すると:
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']);
}
その後、メッセージは送信されません。
注: このsimpleredirect()
関数は、標準的な方法でスクリプトを終了します。
どちらの例でも、$result
は指定された受信者の数として返されます。したがって、メールがキューに入れられていて、ある種のディスパッチが従来のリターンで実行され、リダイレクトの存在下で見逃されているとしか思えません。
SwiftMailerspool
オプションが有効になっているような気がします。ただし、Bolt プロジェクトをいくつか検索しても、どこにも設定されていないようです。スプーリングが有効になっている場合、電子メールはカーネル終了フェーズまで送信されません。これはリダイレクトdie
によって回避されます)。