我正在尝试使用内存假脱机的自定义命令发送电子邮件 . 根据这里的文件:
http://symfony.com/doc/2.7/cookbook/console/sending_emails.html
这是自Symfony 2.3 / swiftmailer 2.3.5以来自动处理的,但它无法正常工作 .
我尝试过标准方式
$email = \Swift_Message::newInstance()
->setSubject('New Email')
->setFrom('noreply@mydomain.com')
->setTo($recipients)
->setBody($message);
$container = $this->getContainer();
$container->get('mailer')->send($email);
什么都没发送 .
我还尝试手动刷新假脱机,这是旧版本中的解决方法,通过在命令末尾添加它
$spool = $container->get('mailer')->getTransport()->getSpool();
$transport = $container->get('swiftmailer.transport.real');
$spool->flushQueue($transport);
这也没有做任何事 .
电子邮件是从我的控制器发送的,所以我知道swiftmailer配置正确 .
我不想切换到文件假脱机,但似乎这是目前唯一的选择 .
编辑:使用内存假脱机时,从vendor / swiftmailer / swiftmailer / lib / classes / Swift / MemorySpool.php调用flushQueue
我将该函数编辑为var_dump它正在使用的$ transport变量,并且决定使用null传输Swift_Transport_NullTransport,只有在配置上设置了disable_delivery时(或者如果在配置中将传输设置为null),才应该使用该传输
我认为这是电子邮件失败的原因,所以我的新问题是,为什么命令使用NullTransport?
编辑2:问题似乎来自这一行
$spool->flushQueue($this->container->get(sprintf('swiftmailer.mailer.%s.transport.real', $name)));
在swiftmailer-bundle / EventListener / EmailSenderListener.php中
我的配置中只有一个邮件程序设置
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
spool: { type: memory }
port: %mailer_port%
encryption: %mailer_encryption%
sender_address: %mailer_sender_address%
这是从paramters.yml中提取值
mailer_transport: sendmail
mailer_host: smtp.sendgrid.net
mailer_user: [USERNAME]
mailer_password: [PASSWORD]
mailer_port: 465
mailer_encryption: ssl
mailer_sender_address: noreply@mydomain.com
但由于某种原因,为“swiftmailer.mailer.default.transport.real”返回的传输是空传输 .
1 回答
我根本无法工作 . Symfony / Swift只会在命令中使用NullTransport,控制台会为默认传输提供此功能
所以我放弃了,转而采用不同的方法 .
我正在使用FOS restbundle,所以我将我试图 Build 的电子邮件命令移到了一个休息控制器上 . 然后我从命令行用curl调用它们
这允许我自动化调用以使用crontab发送电子邮件 .
我不得不稍微更改代码,这样的基本更改
使用休息和卷曲不是应该如何做到的,但至少它是有效的 .