在Symfony中使用Swiftmailer控制Sendmail

时间:2016-08-28 16:11:49

标签: symfony sendmail swiftmailer

以下代码适用于我正在使用的服务器(Hosteurope WebPack):

mail('someone@example.net', 'some subject', 'sendmail is working', 'From: me@example.org', "");

以下代码不是:

$message = \Swift_Message::newInstance()
  ->setSubject('some subject')
  ->setFrom('me@example.org')
  ->setTo('someone@example.net')
  ->setBody('sendmail via swiftmail is working');
$mailer = $this->get('mailer');
$logger = new Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
$mailer->send($message);

在$ logger中写入此错误:

++ Starting Swift_Transport_SendmailTransport
<< 
!! Expected response code 220 but got code "", with message "" (code: 0)"
  ...

我的配置是:

swiftmailer:
    transport: "sendmail"
    sender_address: "me@example.org"

我不明白为什么一个人在工作而另一个人没有工作,因为据我所知,这个电话应该是相同的。

2 个答案:

答案 0 :(得分:0)

问题是Sendmail传输不会发送From Header(如预期的那样)。 使用&#34; mail&#34;因为交通工具对我有用:

swiftmailer:
    transport: "sendmail"
    sender_address: "me@example.org"

希望这可以帮助其他人在使用Hosteurope和sendmail /发送邮件时遇到问题。

答案 1 :(得分:0)

如果您使用带有symfony的sendmail,则可能需要传递一些其他选项。例如:

'/usr/sbin/sendmail -t -i'

要找出必须传递的选项,请在服务器上创建phpinfo.php

<?php
phpinfo();
>

运行它并找到以:

开头的条目
sendmail_from
sendmail_path

其中任何一个都会显示/usr/sbin/sendmail -some_options

为了让它在symfony中运行,您无法直接将其粘贴到config.yml中 - 至少根据我的经验。

打开services.yml并添加:

swiftmailer.mailer.default.transport:
  class:     Swift_SendmailTransport
  arguments: ['/usr/sbin/sendmail -t -i']

其中arguments是来自上面的php条目的路径。

然后将config.yml设置为:

swiftmailer:
    transport: sendmail

或者,如果您想将dev和prod env分开,请将其粘贴到其中一个中。