You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Outlook/Office365企业邮箱SMTP发件报错求助

解决Laravel使用Outlook企业邮箱SMTP发送邮件的535认证失败问题

核心配置修正

  1. 清理.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}" # 变量拼接的引号可保留
    
  2. 验证应用密码有效性

    • 确保使用的是为开启MFA的邮箱生成的专用应用密码,而非邮箱登录密码
    • 生成应用密码时,应用类型选择「其他(自定义名称)」,比如标注「Laravel SMTP」
    • 若怀疑密码过期或无效,重新生成一个替换现有值

额外配置与环境检查

  1. 添加EHLO域名配置
    在.env中追加一行,让SMTP握手时发送正确的域名标识:

    MAIL_EHLO_DOMAIN=site.com # 填写你的网站域名
    
  2. 端口与防火墙验证

    • 放弃端口25,多数服务器提供商默认封禁该端口,坚持使用587端口
    • 检查服务器防火墙/安全组是否放行587端口的出站连接
    • 本地测试时,确认本地防火墙未拦截Laravel的SMTP请求
  3. 清理Laravel配置缓存
    修改.env后必须清理缓存,否则Laravel会读取旧配置:

    php artisan config:clear
    php artisan cache:clear
    
  4. 确认管理员端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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:07:53