在DigitalOcean的LEMP栈Ubuntu部署Laravel,Office365 SMTP认证失败求助
我在DigitalOcean的Ubuntu Droplet上部署了Laravel应用,尝试使用Office365邮箱账号发送邮件时出现以下错误:
Failed to authenticate on SMTP server with username "info@example.com" using the following
authenticators: "LOGIN", "XOAUTH2". Authenticator "LOGIN" returned "Expected response code
"235" but got code "535", with message "535 5.7.139 Authentication unsuccessful,
SmtpClientAuthentication is disabled for the Mailbox. Visit
https://aka.ms/smtp_auth_disabled for more information.
[AS4P192CA0012.EURP192.PROD.OUTLOOK.COM 2023-05-22T18:20:29.187Z 08DB5A 1254806496]".".
Authenticator "XOAUTH2" returned "Expected response code "235" but got code "535", with
message "535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for
the Mailbox. Visit https://aka.ms/smtp_auth_disabled for more information.
[AS4P192CA0012.EURP192.PROD.OUTLOOK.COM 2023-05-22T18:20:39.951Z 08DB5A1254806496]".".
我的.env文件配置如下:
MAIL_MAILER=smtp MAIL_HOST=smtp.office365.com MAIL_PORT=587 MAIL_USERNAME="info@example.com" MAIL_PASSWORD=***PASSWORD*** MAIL_ENCRYPTION=STARTTLS MAIL_FROM_ADDRESS="info@example.com" MAIL_FROM_NAME="${APP_NAME}"
我知道可以启用/禁用SMTP认证,尝试过勾选和取消对应复选框,但没有效果。请问还遗漏了哪些设置才能让网站的SMTP正常工作?
解决方法
- 确认全局SMTP客户端认证状态:单个邮箱的设置可能被全局配置覆盖,需通过PowerShell检查Exchange Online全局设置:
若返回Get-TransportConfig | Format-List SmtpClientAuthenticationDisabledTrue,说明全局禁用,执行以下命令开启:Set-TransportConfig -SmtpClientAuthenticationDisabled $false - 检查单个邮箱的SMTP认证配置:确保目标邮箱未被单独禁用SMTP认证,执行PowerShell命令:
若返回Get-CASMailbox info@example.com | Format-List SmtpClientAuthenticationDisabledTrue,执行命令开启:Set-CASMailbox info@example.com -SmtpClientAuthenticationDisabled $false - 处理多重身份验证(MFA)场景:如果邮箱开启了MFA,普通密码无法用于SMTP认证,需创建应用专用密码,替换
.env中MAIL_PASSWORD的内容。 - 刷新Laravel配置缓存:修改
.env后,必须清除并重建配置缓存,否则新配置不会生效:php artisan config:clear php artisan config:cache - 验证服务器网络连通性:检查DigitalOcean Droplet的出站端口587是否被防火墙/安全组封禁,可通过
telnet smtp.office365.com 587测试与Office365 SMTP服务器的连通性。
内容的提问来源于stack exchange,提问作者Michel FW

