我正在使用symfony2开发一个应用程序 在应用程序的一方面,我正在发送电子邮件,一切都还可以。 但是现在我创建了一个在crontab中运行的命令,但这不会发送电子邮件。 这是我的命令: 使用Doctrine \ ORM \ EntityManager; 使用Symfony \ Component \ Templating \ EngineInterface;
类发件人{ 受保护的$ em;受保护的$ twig; protected $ mailer; public function __construct($ em,\ Twig_Environment $ twig,\ Swift_Mailer $ mailer){ $ this-> em = $ em; $ this-> twig = $ twig; $ this-> mailer = $ mailer; }
public function runSender() {
$proj = $this->em->createQuery ...
$maillist = $this->em->createQuery ...
$templateFile = "projectprojBundle:MailList:emailNew.html.twig";
$templateContent = $this->twig->loadTemplate($templateFile);
$body = $templateContent->render(array('proj' => $proj));
foreach ($maillist as $m) {
$message = \Swift_Message::newInstance()->setSubject('New projects')
->setFrom('...')->setTo($m['email'])
->setContentType('text/html')
->setBody(trim($body));
$this->mailer->send($message);
} } }
查询一切正常,我测试过。 如果我可以从其他课程发送,为什么我不能在这里?
答案 0 :(得分:3)
在执行命令结束时添加:
$spool = $this->mailer->getTransport()->getSpool();
$transport = $this->getContainer()->get('swiftmailer.transport.real');
$spool->flushQueue($transport);
您必须扩展ContainerAwareCommand
类才能访问命令中的服务容器。
答案 1 :(得分:0)
可能是config.yml中的假脱机设置
使用spool: { type: memory }
即时发送电子邮件
# app/config/config.yml
swiftmailer:
# ...
spool: { type: memory }