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(本地)之类的东西。
我目前在使用 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(本地)之类的东西。