我编写了一个自定义控制台命令来查询我的数据库、生成报告并将其通过电子邮件发送到一个地址;但是我似乎无法成功发送电子邮件。我可以从应用程序中其他地方的普通控制器中正常发送电子邮件,如果我手动创建和配置 Swift_Mailer 实例而不是通过容器获取它,我也可以从控制台命令中发送它。
这是我的控制台命令的精简版本:
<?php
namespace Foo\ReportBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ExpiryCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('report:expiry')
->setDescription('Compile and send e-mail listing imminent expiries');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
/* ... */
$message = \Swift_Message::newInstance()
->setSubject('Expiry report')
->setFrom('DoNotReply@domain.com')
->setTo('recipient@domain.com')
->setBody($body);
$mailer = $this->getContainer()->get('mailer');
/* This works...
$transport = \Swift_SmtpTransport::newInstance('smtp.domain.com', 25)
->setUsername('username')
->setPassword('password');
$mailer = \Swift_Mailer::newInstance($transport);
*/
$result = $mailer->send($message);
$output->writeln($result);
}
}
app/config/config.yml
Swiftmailer 配置为通过我的文件中的SMTP 发送(delivery_address: dev@domain.com
也在 中设置app/config/config_dev.yml
):
swiftmailer:
transport: smtp
host: smtp.domain.com
username: username
password: password
spool:
type: memory
运行命令时,它会打印1
到命令行,我认为这意味着它是成功的。但是我同时监控我的邮件服务器的日志,它甚至没有连接。
为了确认我的配置已加载到邮件程序中,我在运行命令时将假脱机从 更改memory
为file
并且消息正在假脱机到文件系统,并且我可以在命令行上使用php app/console swiftmailer:spool:send
.
有没有人对这里发生的事情有任何想法,或者对如何进一步调试它有任何建议?我的app/logs/dev.log
文件中没有任何内容。我正在使用 Symfony 2.1.3-DEV。