Silex + Swift Mailer 不工作
Posted
技术标签:
【中文标题】Silex + Swift Mailer 不工作【英文标题】:Silex + Swift Mailer not working 【发布时间】:2015-04-27 11:21:55 【问题描述】:我有一个带有 Swift Mailer 的 Silex 应用,但配置似乎不是从 $app['swiftmailer.options']
加载的。
我在引导文件中注册了服务
$app->register(new SwiftmailerServiceProvider());
在我的配置文件中
$app['swiftmailer.options'] = array(
'host' => 'smtp.mandrillapp.com',
'port' => '587',
'username' => 'MY_USERNAME',
'password' => 'MY_PASSWORD',
'encryption' => null,
'auth_mode' => null
);
然后我发送我的电子邮件
$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);
发送函数返回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);
所以问题是$app['swiftmailer.options']
未被读取或加载。我在这里遗漏了什么吗?
我正在按照here 的指示进行操作。
【问题讨论】:
【参考方案1】:默认情况下,SwiftmailerServiceProvider 使用假脱机传输来排队电子邮件并在 TERMINATE 阶段(在将响应发送回客户端之后)将它们全部发送。如果你不打电话给Application->run()
,你就绕过了这个过程。您的邮件将留在假脱机中,永远不会被发送。
如果您想在正常的 Silex 流程之外发送邮件,您可以使用手动刷新假脱机
if ($app['mailer.initialized'])
$app['swiftmailer.spooltransport']
->getSpool()
->flushQueue($app['swiftmailer.transport']);
直接取自 SwiftmailerServiceProvider。
或者你可以简单地关闭假脱机
$app['swiftmailer.use_spool'] = false;
【讨论】:
【参考方案2】:试试这个:
$app->register(new \Silex\Provider\SwiftmailerServiceProvider(), array(
'swiftmailer.options' => array(
'sender' => 'sender',
'host' => 'host',
'port' => 'port',
'username' => 'username',
'password' => 'password'
)
));
文档中没有。
【讨论】:
以上是关于Silex + Swift Mailer 不工作的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 swift mailer、gmail smtp、php 发送邮件
Symfony 4.4 - Swift Mailer 安装失败
使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误
使用Mailgun服务提供商在Google Cloud上使用Swift Mailer发送电子邮件
通过 Microsoft 365 SMTP 发送电子邮件时如何使用自定义显示名称? (以 PHP Swift Mailer 为例)