【问题标题】:Symfony 5.3 Mailer setup env vars not reading correctlySymfony 5.3 Mailer 设置环境变量无法正确读取
【发布时间】:2021-12-09 00:23:01
【问题描述】:

在 Symfony 5.3 项目中,我使用 Mailer (..\Symfony\Component\Mailer\MailerInterface) 发送邮件。 为了开发,我需要带有 composer 的“symfony/google-mailer”,并将其设置在 .env.local 中。 假设用户名是“example@gmail.com”,密码是“0000”。

在我指定的 .env.local 中

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 "Symfony\Component\Mailer\Exception\TransportException: 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 编码没有像预期的那样工作(因为它没有被反转?)) 我尝试在 services.yaml 的参数中加载环境变量,并改用这些参数 - 但这也导致了第一个错误。

如果我将身份验证信息直接写入 MAILER_DSN env var,它就可以正常工作,没有问题,比如

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

所以这似乎是一个我无法从文档中弄清楚的语法问题。 有什么提示吗?

【问题讨论】:

    标签: symfony symfony5 phpdotenv symfony-mailer


    【解决方案1】:

    你应该去掉单引号,你需要用${}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"
    

    【讨论】:

    • 谢谢 - 这正是我所缺少的。不认识这种语法... :-)
    【解决方案2】:

    .env :

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

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

    【讨论】:

    • 您是在谈论不太安全的应用程序设置,对吗?我已经这样做了。更改为您提供的语法不会改变任何内容。同样的错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2014-08-16
    • 2019-07-16
    • 2021-10-14
    • 2018-07-30
    • 2020-01-01
    相关资源
    最近更新 更多