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

Laravel应用如何为Exchange Online基本认证弃用做准备?

Laravel + Outlook SMTP:Basic认证禁用的影响与适配方案

一、对现有Laravel项目的直接影响

  • 原来靠用户名/密码走SMTP Basic认证发邮件的Laravel应用,在Basic认证禁用后会直接发送失败,抛出401未授权之类的认证错误
  • 所有依赖Outlook SMTP的邮件功能全歇菜:用户注册验证邮件、密码重置通知、业务告警邮件等都会停摆

二、适配方案:切换到OAuth 2.0认证

Laravel 8.x及以上版本原生支持SMTP OAuth认证,针对Outlook(Exchange Online),推荐以下两种实现方式:

方式1:用Laravel自带的OAuth配置(优先选这个)

  1. 在Azure AD创建应用注册

    • 登录Azure门户,新建一个应用注册,重定向URI填你的应用域名(本地开发可以用http://localhost)
    • 给应用添加API权限:选Microsoft Graph的SMTP.Send(委托权限),并完成管理员同意
    • 生成客户端密钥(Client Secret),记好客户端ID、租户ID、客户端密钥这三个关键信息
  2. 修改Laravel邮件配置
    更新.env文件里的邮件相关参数:

    MAIL_MAILER=smtp
    MAIL_HOST=smtp.office365.com
    MAIL_PORT=587
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=你的Outlook邮箱@domain.com
    MAIL_FROM_NAME="${APP_NAME}"
    MAIL_USERNAME=你的Outlook邮箱@domain.com
    MAIL_PASSWORD= # 这里不用填密码,直接留空或删掉
    MAIL_AUTH_MODE=oauth
    MAIL_OAUTH_CLIENT_ID=你的Azure应用客户端ID
    MAIL_OAUTH_CLIENT_SECRET=你的Azure应用客户端密钥
    MAIL_OAUTH_TENANT_ID=你的Azure租户ID
    MAIL_OAUTH_TOKEN_URL=https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
    

    再在config/mail.php的smtp驱动配置里补充OAuth参数:

    'smtp' => [
        'transport' => 'smtp',
        'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
        'port' => env('MAIL_PORT', 587),
        'encryption' => env('MAIL_ENCRYPTION', 'tls'),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'auth_mode' => env('MAIL_AUTH_MODE'),
        'oauth' => [
            'client_id' => env('MAIL_OAUTH_CLIENT_ID'),
            'client_secret' => env('MAIL_OAUTH_CLIENT_SECRET'),
            'token_url' => env('MAIL_OAUTH_TOKEN_URL'),
            'tenant_id' => env('MAIL_OAUTH_TENANT_ID'),
        ],
    ],
    

方式2:第三方包适配(针对Laravel 8.x以下版本)

如果你的项目还在老版本Laravel上,可以用laravel/socialite配合手动获取OAuth token,或者用专门的SMTP OAuth扩展包。不过更建议直接升级Laravel到支持原生OAuth的版本,长期维护更省心。

三、测试验证步骤

  • 先在测试环境部署配置,别直接动生产
  • 用Laravel自带的方法快速测一发:
    Route::get('/test-smtp-oauth', function () {
        \Illuminate\Support\Facades\Mail::raw('OAuth认证测试邮件内容', function ($message) {
            $message->to('你的测试邮箱@example.com')->subject('Outlook SMTP OAuth测试');
        });
        return '测试邮件已发送,去收件箱查收';
    });
    
  • 可以去Azure AD的日志里查token获取和邮件发送的请求记录,确认流程正常

内容的提问来源于stack exchange,提问作者JohnRugen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:42:51