Symfony 5.3邮件设置环境变量读取不正确



在Symfony 5.3项目中,我使用Mailer (..SymfonyComponentMailerMailerInterface)发送邮件。为了开发我需要"symfony/google-mailer"并在。env.local中设置它。假设用户名是"example@gmail.com"密码为"0000">

在.env。本地I指定

MAILER_USER='example@gmail.com'
MAILER_PASSWORD='0000'
MAILER_DSN=gmail://MAILER_USER:MAILER_PASSWORD@default

导致错误

Failed to authenticate on SMTP server with username "MAILER_USER" using the following authenticators: "LOGIN", "PLAIN", "XOAUTH2". Authenticator "LOGIN" returned "SymfonyComponentMailerExceptionTransportException: Expected response code "235" but got code "535", with message "535-5.7.8 Username and Password not accepted.

如文档中所述,我将用户名中的一个特殊字符("@")更改为url编码形式,如

MAILER_USER='example%40gmail.com'

,然后导致错误

Email "example%40gmail.com" does not comply with addr-spec of RFC 2822.

(显然url编码没有像预期的那样工作(因为它没有反转?))我尝试在服务的参数中加载env变量。并使用参数——但这也会导致第一个错误。

如果我直接将认证信息写入MAILER_DSN环境变量中它就会正常工作,没有问题,如

MAILER_DSN=gmail://example@gmail.com:0000@default

所以这似乎是一个语法问题,我不能从文档中找出。有提示吗?

你应该去掉单引号,你需要用${}sic来包装在其他环境变量中使用的环境变量

MAILER_USER=example@gmail.com
MAILER_PASSWORD=0000
MAILER_DSN=gmail://${MAILER_USER}:${MAILER_PASSWORD}@default

结果:

$_SERVER['MAILER_DSN'] = "gmail://example@gmail.com:0000@default"

。env:

MAILER_DSN=smtp://username:password@smtp.gmail.com

你必须在google参数(安全)中启用对应用程序的访问。