4

我目前在处理由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 不会识别/理解这个引用

'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: https://stackoverflow.com/questions/42558903/expected-response-code-250-but-got-code-535-with-message-535-5-7-8-username
- Change Port back to 587 and tls again
- Visit `http://www.google.com/accounts/DisplayUnlockCaptcha` and sign in with your Gmail username and password.

4

1 回答 1

5

请勿在生产环境中使用 Gmail¹。

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

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

我在这里读到我必须硬编码里面的值app/mail.php而不是引用.env文件,因为 Heroku 不会识别/理解这个引用

'password' => env('MAIL_PASSWORD')

这是不正确的。

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


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

于 2019-03-19T12:14:27.393 回答