如何在Symfony 4的.env文件中配置MAILER_URL以使用Swift_Mailer通过sendmail发送电子邮件?

时间:2018-07-23 16:25:26

标签: php email sendmail swiftmailer symfony4

我正在使用Swift_Mailer发送Symfony 4应用程序来发送电子邮件。 由于我无法使用SMTP(不要问为什么……),因此我必须使用类似sendmail的东西。

默认情况下,Swift Mailer的配置在Symfony的.env文件中以URL表示法在名为MAILER_URL的选项中完成。默认值为“ null://localhost”,它根本不发送邮件。

我所能找到的全部内容就是Symfony docs和Composer生成的示例.env中记录的Gmail或SMTP的示例。

.env的默认内容:

# …

###> symfony/swiftmailer-bundle ###
# For Gmail as a transport, use: "gmail://username:password@localhost"
# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode="
# Delivery is disabled by default via "null://localhost"
MAILER_URL=null://localhost
###< symfony/swiftmailer-bundle ###

# …

我不知道的是什么,所以我的问题是什么

我需要做什么才能使sendmail与此一起工作?

我已经尝试过类似的事情:

MAILER_URL=sendmail://localhost

MAILER_URL=sendmail://my-domain.com

但到目前为止没有成功。

使用控制台命令时

bin/console swiftmailer:email:send

我什至收到“ [确定] 1封电子邮件已成功发送”。结果,但实际上没有发送电子邮件。
(…顺便说一下,不假脱机。bin/console swiftmailer:spool:send返回“已发送0封电子邮件”。) 邮件传递似乎中断了,因为邮件不会对我的邮件帐户造成骚扰,所以我的SPAM也为空。

另一方面,直接调用sendmail命令也可以。 (我的测试邮件虽然到达了我的SPAM,但仍然:邮件已发送。)

再次,我必须如何在Symfony 4的MAILER_URL中将Swift_Mailer的{​​{1}}配置为使用.env

有可能吗?

4 个答案:

答案 0 :(得分:1)

好的,该表示法已经正确了。因此,这个对于使用sendmail是有效的:

MAILER_URL=sendmail://my-domain.com

我的实际问题是假脱机邮件处于活动状态。我从spool配置中注释了swiftmailer.yaml条目。

顺便说一下,对Symfony Profiler的了解对我很有帮助。

…我的邮件仍然没有到达,但是我确定这与MAILER_URL没有关系。所以,我的问题得到了回答。

答案 1 :(得分:1)

对yaml中的评论后台处理对我来说已解决

答案 2 :(得分:0)

不确定我是否正确解决了您的问题,但就我而言,我使用的是Gmail帐户,这是我的.env文件的第23行

MAILER_URL=gmail://myadress@gmail.com:myemailpassword@localhost

您已经通过composer require symfony/swiftmailer-bundle安装了SwiftMailer吗? (对不起,我的英语)

答案 3 :(得分:0)

尝试此配置:

swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }
transport: 'sendmail'
command: '/usr/sbin/sendmail -oi -t'

文件路径:

  

/my_sf4_project/config/packages/swiftmailer.yaml

我正在使用Symfony 4.3.1和SwiftMailer 6.2.0。您可以在SwiftMailer捆绑包文档中阅读以下内容:

/**
 * Start the standalone SMTP session if running in -bs mode.
 */

然后:

/**
 * Set the command to invoke.
 *
 * If using -t mode you are strongly advised to include -oi or -i in the flags.
 * For example: /usr/sbin/sendmail -oi -t
 * Swift will append a -f<sender> flag if one is not present.
 *
 * The recommended mode is "-bs" since it is interactive and failure notifications
 * are hence possible.
 *
 * @param string $command
 *
 * @return $this
 */

带有以下注释的文件路径:

  

供应商/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php

在更改为'/ usr / sbin / sendmail -oi -t'之前,我收到了来自SwiftMailer的错误:

  

app.ERROR:刷新电子邮件队列时发生异常:预期响应代码为220,但响应为空[] []

现在更改sendmail参数后,我就可以成功发送邮件了。