返回

在托管 Laravel 项目中发送电子邮件失败?解决错误的完整指南

php

托管 Laravel 项目中解决邮件发送错误的全面指南

问题

在将 Laravel 项目上传到主机后,尝试使用其发送电子邮件时可能会遇到错误,例如:"Failed to authenticate on SMTP server with username "user@example.com" using 2 possible authenticators."。

原因分析

此错误通常是由于以下原因之一造成的:

  • 不正确的 SMTP 设置: .env 文件中的 SMTP 主机、端口、用户名、密码或加密设置不正确。
  • 应用程序密码问题: 使用的是普通 Gmail 密码,而不是 Gmail 生成的应用程序密码。
  • 不安全的应用程序访问被阻止: Gmail 帐户的 "允许不安全的应用程序访问" 设置未启用。
  • 防火墙或代理限制: 防火墙或代理设置阻止了与邮件服务器的连接。
  • 双因素身份验证 (2FA): 启用了 2FA,需要使用特定于应用程序的密码。

解决方法

要解决此错误,请执行以下步骤:

1. 检查 SMTP 设置

验证 .env 文件中 SMTP 设置的准确性,包括:

  • MAIL_HOST:邮件服务器地址
  • MAIL_PORT:邮件服务器端口
  • MAIL_USERNAME:用于身份验证的电子邮件地址
  • MAIL_PASSWORD:应用程序密码
  • MAIL_ENCRYPTION:加密类型
  • MAIL_FROM_ADDRESS:发件人电子邮件地址
  • MAIL_FROM_NAME:发件人姓名

2. 生成应用程序密码

从 Gmail 生成一个应用程序密码,而不是使用你的普通密码。

3. 启用不安全的应用程序访问

访问以下链接启用 "允许不安全的应用程序访问" 设置:

https://www.google.com/settings/security/lesssecureapps

4. 检查防火墙和代理设置

确保防火墙或代理设置允许与邮件服务器的连接。

5. 处理双因素身份验证

如果启用了 2FA,请使用特定于应用程序的密码。

示例代码

以下是 .env 文件中示例 SMTP 设置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=user@example.com
MAIL_PASSWORD=1234567890abcdefgh
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=user@example.com
MAIL_FROM_NAME="My Laravel App"

结论

通过仔细检查和验证上述设置,你应该能够解决在托管的 Laravel 项目中发送电子邮件时的错误。如果问题仍然存在,请联系你的主机提供商或邮件服务提供商以获取进一步的帮助。

常见问题解答

1. 如何创建应用程序密码?

登录你的 Gmail 帐户,访问 "安全" > "应用密码",选择 "邮件" 并生成一个密码。

2. 如何启用 "允许不安全的应用程序访问"?

访问 "安全" > "较不安全的应用访问",然后启用该选项。

3. 我在哪里可以找到特定于应用程序的密码?

生成应用程序密码后,它将显示在屏幕上。保存它供以后使用。

4. 如何检查防火墙设置?

访问防火墙设置并确保 SMTP 服务器使用的端口(通常为 465 或 587)已打开。

5. 我应该联系谁以获取更多帮助?

如果上述步骤无法解决问题,请联系你的主机提供商或邮件服务提供商(如 Gmail)。