在 Symfony 中使用 Swiftmailer 控制 Sendmail

Control Sendmail with Swiftmailer in Symfony

以下代码适用于我正在使用的服务器 (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"

我不明白为什么一个有效而另一个无效,因为据我所知,调用应该是相同的。

问题是 Sendmail Transport 没有发送 From Header(如预期的那样)。 使用 "mail" 作为传输对我有用:

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

希望这可以帮助其他遇到 Hosteurope 和 sendmail/sending 邮件问题的人。

如果您在 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 分开,请将其粘贴到其中一个。