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

Laravel通过Office 365发邮件遇550权限错误,求Office 365配置方案

解决Laravel用Office 365发邮件出现550权限错误的方案

这个问题我帮好几个开发者排查过,本质是Office 365的发送权限限制和Laravel的配置细节没匹配上,我给你一步步梳理可行的解决办法:

先搞懂错误原因

你看到的Client does not have permissions to send as this sender 550错误,核心是Office 365不允许你的应用用当前配置的发件人邮箱发送邮件——要么是SMTP验证账号和发件人不一致,要么是账号没开SMTP权限,或者是开启了MFA却用了原密码。

方案1:确保发件人邮箱和SMTP用户名完全一致

Office 365的SMTP服务有个硬性要求:用来做SMTP验证的账号(也就是MAIL_USERNAME)必须和你设置的发件人邮箱完全相同。比如你的MAIL_USERNAME是support@yourdomain.com,那Laravel里的发件地址也得是这个,不能用admin@yourdomain.com之类的其他邮箱。

你可以直接在.env里添加一行统一配置:

MAIL_FROM_ADDRESS=your-full-email@yourdomain.com # 这个值要和MAIL_USERNAME完全一样
MAIL_FROM_NAME="你的应用名称"

方案2:开启账号的Authenticated SMTP权限

默认情况下,部分Office 365商业版/教育版账号会关闭“Authenticated SMTP”权限,导致第三方应用没法通过SMTP发邮件。你可以通过两种方式开启:

方式A:通过Microsoft 365管理中心操作

  1. 登录Microsoft 365 Admin Center,找到对应的用户邮箱
  2. 进入「邮件」选项卡,找到「电子邮件应用」设置
  3. 确保「Authenticated SMTP」处于开启状态(如果是灰色无法修改,就用下面的PowerShell方法)

方式B:用PowerShell命令开启

打开PowerShell,执行以下命令(需要先安装Exchange Online模块):

# 连接到Exchange Online
Connect-ExchangeOnline
# 给指定账号开启SMTP权限
Set-CASMailbox -Identity "your-full-email@yourdomain.com" -SmtpClientAuthenticationDisabled $false

执行完后等待15-30分钟让配置生效。

方案3:如果开启了MFA,必须用应用密码

如果你的Office 365账号开启了多因素认证(MFA),直接用原账号密码作为MAIL_PASSWORD肯定会失败,这时候需要生成应用密码:

  1. 登录该用户的Microsoft账户,进入「安全」选项卡
  2. 找到「应用密码」选项,生成一个新的应用密码
  3. 把这个应用密码填到.env的MAIL_PASSWORD字段里,替换原账号密码

方案4:检查Laravel版本适配的配置细节

如果你的Laravel是9及以上版本,注意MAIL_DRIVER已经被弃用,要改成MAIL_MAILER,完整的.env配置应该是这样:

MAIL_MAILER=smtp
MAIL_HOST=smtp.office365.com
MAIL_PORT=587
MAIL_USERNAME=your-full-email@yourdomain.com
MAIL_PASSWORD=your-app-password-or-normal-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-full-email@yourdomain.com
MAIL_FROM_NAME="你的应用名称"

测试配置是否生效

可以写个简单的测试路由快速验证:

Route::get('/test-office365-mail', function () {
    try {
        \Illuminate\Support\Facades\Mail::raw('这是Laravel通过Office 365发送的测试邮件', function ($message) {
            $message->to('你的测试邮箱@example.com')
                    ->subject('Office 365 SMTP测试');
        });
        return '邮件发送成功!';
    } catch (\Exception $e) {
        return '发送失败:' . $e->getMessage();
    }
});

访问这个路由,就能快速知道配置是否正确了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:37:41