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配置(优先选这个)
在Azure AD创建应用注册
- 登录Azure门户,新建一个应用注册,重定向URI填你的应用域名(本地开发可以用
http://localhost) - 给应用添加API权限:选Microsoft Graph的
SMTP.Send(委托权限),并完成管理员同意 - 生成客户端密钥(Client Secret),记好客户端ID、租户ID、客户端密钥这三个关键信息
- 登录Azure门户,新建一个应用注册,重定向URI填你的应用域名(本地开发可以用
修改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
相关产品推荐
相关产品推荐

