Rap*_*rco 5 php swiftmailer silex mandrill
我有一个带有 Swift Mailer 的 Silex 应用程序,但似乎没有从$app['swiftmailer.options'].
我在引导文件中注册了该服务
$app->register(new SwiftmailerServiceProvider());
Run Code Online (Sandbox Code Playgroud)
在我的配置文件中
$app['swiftmailer.options'] = array(
'host' => 'smtp.mandrillapp.com',
'port' => '587',
'username' => 'MY_USERNAME',
'password' => 'MY_PASSWORD',
'encryption' => null,
'auth_mode' => null
);
Run Code Online (Sandbox Code Playgroud)
然后我发送我的电子邮件
$message = \Swift_Message::newInstance()
->setSubject($this->app['forum_name'] . ' Account Verification')
->setFrom(array('no-reply@domain.com'))
->setTo(array('recipient@example.com'))
->setBody('My email content')
->setContentType("text/html");
$this->app['mailer']->send($message);
Run Code Online (Sandbox Code Playgroud)
send 函数返回,1但电子邮件从未发送过。但是,当我尝试手动创建 的实例时Swift_SmtpTransport,电子邮件会发送。
$transport = \Swift_SmtpTransport::newInstance('smtp.mandrillapp.com', 587)
->setUsername('MY_USERNAME')
->setPassword('MY_PASSWORD');
...
$mailer = \Swift_Mailer::newInstance($transport);
$mailer->send($message);
Run Code Online (Sandbox Code Playgroud)
所以问题是$app['swiftmailer.options']没有读取或加载。我在这里错过了什么吗?
我正在按照此处的说明进行操作。
默认情况下,SwiftmailerServiceProvider 使用假脱机传输对电子邮件进行排队,并在 TERMINATE 阶段(在响应发送回客户端之后)发送所有电子邮件。如果您不调用Application->run(),则您将绕过此过程。您的邮件将留在假脱机中并且永远不会被发送。
如果您想在正常的 Silex 流程之外发送邮件,您可以使用以下命令手动刷新线轴
if ($app['mailer.initialized']) {
$app['swiftmailer.spooltransport']
->getSpool()
->flushQueue($app['swiftmailer.transport']);
}
Run Code Online (Sandbox Code Playgroud)
这是直接从 SwiftmailerServiceProvider 获取的。
或者你可以简单地关闭假脱机
$app['swiftmailer.use_spool'] = false;
Run Code Online (Sandbox Code Playgroud)