使用基本的Symfony 4.4示例来使用MailerInterface,我在.env
文件中设置了这个MAILER_DSN:
MAILER_DSN=smtp://email@example.com:123456@smtp.example.com:587
或者这个(没有端口(:
MAILER_DSN=smtp://email@example.com:123456@smtp.example.com
我得到这个错误:
无法使用用户名在SMTP服务器上进行身份验证"email@example.com"使用以下身份验证程序:LOGIN、PLAIN
我的服务器需要端口587上的STARTTLS,但我不知道如何使用此DSN格式指定它。
对我来说,当在DSN中指定端口(587(时,它就起作用了,邮件程序组件正确识别并使用了STARTTLS。在您的示例中可能很棘手的是,您需要用%40
转义email@example.com
中的@
,因此您的DSN将如下所示:
MAILER_DSN=smtp://email%40example.com:123456@smtp.example.com:587
任何特殊的URI字符都需要转义(就像urlencode
一样,所以+
、@
、$
、#
、/
、:
、*
、!
(,也许这就是它不起作用的原因。
在我的情况下mailer.yml
framework:
mailer:
dsn: 'smtp://%env(MAILER_USER)%:%env(resolve:MAILER_PASS)%@%env(MAILER_HOST)%?encryption=tls&auth_mode=plain'
.env
MAILER_USER=user@server
MAILER_PASS=password$
MAILER_HOST=mail.server:25
如果您的邮件服务器密码包含#,那么您应该引用环境字符串,因为#之后的所有内容都将被视为注释(从Laravel 5.8开始(