Laravel使用Outlook/Office365企业邮箱SMTP发件报错求助
解决Laravel使用Outlook企业邮箱SMTP发送邮件的535认证失败问题
核心配置修正
清理.env中的多余引号
你的MAIL_PASSWORD和MAIL_FROM_ADDRESS被双引号包裹,会导致Laravel读取到带引号的无效密码,直接引发认证失败。修改后配置如下:MAIL_MAILER=smtp MAIL_HOST=smtp.office365.com MAIL_PORT=587 MAIL_USERNAME=email@site.com MAIL_PASSWORD=app_password # 直接填写应用密码,去掉双引号 MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=email@site.com # 去掉双引号 MAIL_FROM_NAME="${APP_NAME}" # 变量拼接的引号可保留验证应用密码有效性
- 确保使用的是为开启MFA的邮箱生成的专用应用密码,而非邮箱登录密码
- 生成应用密码时,应用类型选择「其他(自定义名称)」,比如标注「Laravel SMTP」
- 若怀疑密码过期或无效,重新生成一个替换现有值
额外配置与环境检查
添加EHLO域名配置
在.env中追加一行,让SMTP握手时发送正确的域名标识:MAIL_EHLO_DOMAIN=site.com # 填写你的网站域名端口与防火墙验证
- 放弃端口25,多数服务器提供商默认封禁该端口,坚持使用587端口
- 检查服务器防火墙/安全组是否放行587端口的出站连接
- 本地测试时,确认本地防火墙未拦截Laravel的SMTP请求
清理Laravel配置缓存
修改.env后必须清理缓存,否则Laravel会读取旧配置:php artisan config:clear php artisan cache:clear确认管理员端SMTP权限
- 登录Microsoft 365管理员中心,进入「活跃用户」→ 目标用户 →「邮件」→「邮件应用程序」,确认「POP3/SMTP」权限已开启
- 检查全局策略是否存在禁止非客户端应用发送邮件的限制
快速测试方法
创建测试路由验证配置是否生效:
Route::get('/test-email', function () { try { Mail::raw('测试邮件内容', function ($message) { $message->to('your-test-email@example.com') ->subject('Laravel Outlook SMTP测试'); }); return '邮件发送成功'; } catch (\Exception $e) { return '发送失败: ' . $e->getMessage(); } });
内容的提问来源于stack exchange,提问作者Hilal Najem
相关产品推荐
相关产品推荐

