Laravel 密码重置电子邮件未在 Heroku 上使用 gmail 发送

Laravel password reset email not sending using gmail on Heroku

我目前在使用 make:auth in Laravel 5.6 创建的密码重置邮件时遇到问题。我的应用程序托管在 Heroku 上。在我的本地环境中,一切正常。我在 Heroku 的配置变量中设置了正确的值,在我的本地 .env 文件中也是如此:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myMail@gmail.com
MAIL_PASSWORD=bla
MAIL_ENCRYPTION=tls

我在这里读到我必须对 app/mail.php 中的值进行硬编码而不是引用 .env 文件,因为 Heroku 不会 recognize/understand 这个引用

'password' => env('MAIL_PASSWORD')

但是我的数据将在 GitHub 存储库中可见。

我做错了什么?

编辑:

接受的答案是可行的方法,应该使用附加组件在 Heroku 中发送邮件。在设置 sendgrid 之后,我仍然找到了一种使其与 gmail 一起工作的方法;)

- Use `Port 465 with ssl` as encryption. 

- Allow `less secure apps` access to my account.

- Visit `http://www.google.com/accounts/DisplayUnlockCaptcha` and sign in with your Gmail username and password.

经过这些步骤后,成功了。 也许这对其他人有帮助。

编辑 2:

我将 Laravel 从版本 5.x 迁移到版本 8,但我 运行 再次遇到问题,所以我不得不再次改变我的 gmail 方法。

我必须:

- Allow `less secure apps` access to my account.
- Enable two step verification and create an App Password like in the accepted answer of this question: 
- Change Port back to 587 and tls again
- Visit `http://www.google.com/accounts/DisplayUnlockCaptcha` and sign in with your Gmail username and password.

不要在生产环境中使用 Gmail¹。

Gmail 并非旨在充当您应用程序的 SMTP 网关。相反,使用 Heroku 推荐的众多 mail addons 之一。 Mailgun 和 SendGrid 都是非常受欢迎的选项,但还有很多其他选项。

这些工具旨在为应用程序发送邮件。他们拒绝您的邮件的可能性会大大降低,如果配置得当,您的邮件被垃圾邮件过滤器捕获的可能性也会大大降低。他们中的大多数都有设置内容的演练,我鼓励您遵循它们。确保不要跳过 SPF and DKIM 反垃圾邮件功能。

I have read here that I have to hard-code the values inside app/mail.php instead of referencing the .env file because Heroku wouldn't recognize/understand this reference

'password' => env('MAIL_PASSWORD')

这是不正确的。

你说你已经在 Heroku 上设置了配置变量,并且填充了环境。 .env 文件只是一个方便的本地变通方法来做同样的事情。无论您选择哪个邮件插件,都会自动为您设置一个或多个环境变量,您应该在代码中使用它们。


¹您可能也不应该在 开发 中使用它,但它不是什么大问题。我强烈建议您改用 Mailtrap(云)或 Mailcatcher(本地)之类的东西。