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

Office365 SMTP搭配PHPMailer邮件投递不稳定问题咨询

Office365 SMTP配合PHPMailer投递不稳定解决方案

核心问题排查与修复方案

  • 修正循环变量bug:原代码中foreach($recipients as $recipients)会覆盖原始收件人数组,多收件人场景下会出现投递逻辑异常,仅单收件人时可正常运行,是偶发成功的常见原因,修改为:
    foreach($recipients as $recipient){
        $mail->addBCC($recipient);
    }
    
  • 校验发件人一致性:Office365强制要求发件人地址$mail->From必须与SMTP认证用户名$mail->Username完全一致,不一致的邮件会被微软后台静默拦截,既不会送达也不会产生退信。
  • 确认SMTP配置适配Office365规则:使用STARTTLS加密时必须固定端口为587,同时添加配置关闭自动TLS升级避免兼容性问题:
    $mail->Port = 587;
    $mail->SMTPAutoTLS = false;
    
  • 控制发件频率与收件人数量:Office365商用账号默认限制单分钟发件不超过30封,单封邮件密送收件人不超过100个,超出限制的邮件会被临时拦截。
  • 升级PHPMailer到6.0以上稳定版本:旧版本PHPMailer对Office365的TLS握手、SMTP协议适配存在缺陷,会出现身份验证通过但投递中断的偶发问题。
  • 配置退信头字段:添加自定义头获取拦截原因:
    $mail->addCustomHeader('Return-Receipt-To', $from_email);
    
    被拦截的邮件会产生退信到发件人邮箱,可通过退信内容确认具体拦截规则。

修正后完整代码

$mail = new PHPMailer(true);

// 调整调试等级为2即可,3会输出多余连接日志
$mail->SMTPDebug = 2;  
$mail->CharSet = "utf-8";
$mail->isSMTP();            
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->AuthType = 'LOGIN';
$mail->Username = $user;                 
$mail->Password = $pass;                           
$mail->SMTPSecure = "STARTTLS";  
// 关闭自动TLS升级适配Office365
$mail->SMTPAutoTLS = false;                        
// 固定Office365 SMTP端口为587
$mail->Port = 587;                                  

// 确保此处$from_email与$user完全一致
$mail->From = $from_email;
$mail->FromName = $from_name;

// 修正循环变量
foreach($recipients as $recipient){
    $mail->AddBcc($recipient);
}

$mail->isHTML(true);
$mail->Subject = $subject;
$mail->msgHTML($message);
// 可选添加退信头
$mail->addCustomHeader('Return-Receipt-To', $from_email);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:09:02