如何在 Symfony 4 的 .env 文件中配置 MAILER_URL 以使用 Swift_Mailer 通过 sendmail 发送电子邮件?
How to configure MAILER_URL in .env file of Symfony 4 to send e-mails via sendmail with Swift_Mailer?
我正在开发一个使用 Swift_Mailer
发送电子邮件的 Symfony 4 应用程序。
由于在我的情况下不可能使用 SMTP(不要问为什么......)我必须使用类似 sendmail
.
的东西
默认情况下,Swift Mailer 的配置是在 Symfony 的 .env
文件中以 URL 符号在名为 MAILER_URL
的选项中完成的。默认值为“null://localhost
”,即根本不发送邮件。
我所能找到的值必须是 Gmail 或 SMTP 的示例,如 Symfony docs 以及 Composer 生成的示例 .env 中所述。
.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
我什至收到“[OK] 1 封电子邮件已成功发送。”结果,但实际上没有发送电子邮件。
(……顺便说一句,没有假脱机。bin/console swiftmailer:spool:send
returns“已发送 0 封电子邮件”。)
邮件发送似乎中断了,因为邮件不会到达我的邮件帐户,而且我的垃圾邮件是空的。
另一方面,直接调用 sendmail
命令确实有效。 (虽然我的测试邮件到达了我的垃圾邮件,但仍然:邮件已发送。)
同样,我如何在 Symfony 4 的 .env
中为 Swift_Mailer
配置 MAILER_URL
以使用 sendmail
?
有可能吗?
不确定我是否正确解决了您的问题,但就我而言,我使用的是 Gmail 帐户,这是我的 .env 文件的第 23 行
MAILER_URL=gmail://myadress@gmail.com:myemailpassword@localhost
您是否已经通过 composer require symfony/swiftmailer-bundle
安装了 SwiftMailer?
(对不起我的英语)
好的,符号已经正确了。所以这个对使用 sendmail
:
是有效的
MAILER_URL=sendmail://my-domain.com
我的实际问题是邮件假脱机处于活动状态。我从 swiftmailer.yaml
配置中注释掉了 spool
条目。
顺便说一句,看看 Symfony Profiler 对我帮助很大。
...我的邮件仍然没有到达,但我确定这与 MAILER_URL
无关。所以,我的问题得到了回答。
在 yaml 中评论 spool 为我解决了问题
试试这个配置:
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
*/
带有这些注释的文件路径:
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php
在更改为“/usr/sbin/sendmail -oi -t”之前,我收到了来自 SwiftMailer 的错误消息:
app.ERROR: Exception occurred while flushing email queue: Expected response code 220 but got an empty response [] []
更改 sendmail 参数后,我现在可以成功发送邮件了。
我正在开发一个使用 Swift_Mailer
发送电子邮件的 Symfony 4 应用程序。
由于在我的情况下不可能使用 SMTP(不要问为什么......)我必须使用类似 sendmail
.
默认情况下,Swift Mailer 的配置是在 Symfony 的 .env
文件中以 URL 符号在名为 MAILER_URL
的选项中完成的。默认值为“null://localhost
”,即根本不发送邮件。
我所能找到的值必须是 Gmail 或 SMTP 的示例,如 Symfony docs 以及 Composer 生成的示例 .env 中所述。
.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
我什至收到“[OK] 1 封电子邮件已成功发送。”结果,但实际上没有发送电子邮件。
(……顺便说一句,没有假脱机。bin/console swiftmailer:spool:send
returns“已发送 0 封电子邮件”。)
邮件发送似乎中断了,因为邮件不会到达我的邮件帐户,而且我的垃圾邮件是空的。
另一方面,直接调用 sendmail
命令确实有效。 (虽然我的测试邮件到达了我的垃圾邮件,但仍然:邮件已发送。)
同样,我如何在 Symfony 4 的 .env
中为 Swift_Mailer
配置 MAILER_URL
以使用 sendmail
?
有可能吗?
不确定我是否正确解决了您的问题,但就我而言,我使用的是 Gmail 帐户,这是我的 .env 文件的第 23 行
MAILER_URL=gmail://myadress@gmail.com:myemailpassword@localhost
您是否已经通过 composer require symfony/swiftmailer-bundle
安装了 SwiftMailer?
(对不起我的英语)
好的,符号已经正确了。所以这个对使用 sendmail
:
MAILER_URL=sendmail://my-domain.com
我的实际问题是邮件假脱机处于活动状态。我从 swiftmailer.yaml
配置中注释掉了 spool
条目。
顺便说一句,看看 Symfony Profiler 对我帮助很大。
...我的邮件仍然没有到达,但我确定这与 MAILER_URL
无关。所以,我的问题得到了回答。
在 yaml 中评论 spool 为我解决了问题
试试这个配置:
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
*/
带有这些注释的文件路径:
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php
在更改为“/usr/sbin/sendmail -oi -t”之前,我收到了来自 SwiftMailer 的错误消息:
app.ERROR: Exception occurred while flushing email queue: Expected response code 220 but got an empty response [] []
更改 sendmail 参数后,我现在可以成功发送邮件了。