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

Perl通过Office 365发送邮件随机失败,Net::SMTPS返回undef求助

问题解决思路
  • 修正TLS版本配置
    你当前代码硬编码使用已被Office365弃用的TLS 1.0协议,服务端会随机拒绝低版本TLS的连接请求。将SSL_version参数调整为TLSv1_2及以上版本,或删除该参数让程序自动协商服务端支持的最高版本TLS协议即可。
  • 显式配置SNI参数
    日志中明确提示not using SNI because hostname is unknown,Office365的SMTP服务依赖SNI完成SSL证书校验,未携带SNI的握手请求会被随机拦截。需要在初始化参数中新增SSL_hostname => 'smtp.office365.com',让SSL握手时携带SNI信息。
  • 修正EHLO标识
    你当前默认发送的EHLO标识为localhost.localdomain,部分Office365边缘节点会将这类不规范的内网主机名标记为异常,触发流量拦截。可以新增Hello参数,填写你服务器的公网域名或公网IP。
  • 新增重试机制
    若以上配置调整后仍有极偶发失败,可新增简单的连接重试逻辑,连接失败后间隔12秒重试23次,可覆盖绝大多数网络波动导致的握手失败场景。
调整后参考代码
use Net::SMTPS;
my $mailer = Net::SMTPS->new("smtp.office365.com", 
     Port => 587, 
     doSSL => "starttls", 
     SSL_version => "TLSv1_2", 
     SSL_hostname => "smtp.office365.com",
     Hello => "你的服务器实际公网域名/IP",
     Debug => 4
);
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:03