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

ASP.NET MVC调用SMTP发邮件需开放的出站端口及发送失败排查

SMTP发信问题解答

1. Windows防火墙出站端口要求

  • 必须开放对应SMTP服务的出站端口,具体端口取决于你使用的加密模式:
    • 未加密/STARTTLS模式:默认端口25,注意绝大多数云服务商默认封禁25端口的出站请求用于防范垃圾邮件
    • SSL加密模式:默认端口465
    • 部分服务商提供的替代STARTTLS端口:587
  • 实际使用端口以你的SMTP服务提供商给出的官方说明为准。

2. 生产环境无报错但收件人收不到邮件的常见原因

  • 出站请求被拦截:优先排查生产服务器的Windows防火墙出站规则、云服务商安全组、机房硬件防火墙是否封禁了对应的SMTP端口,很多拦截规则会静默丢弃数据包,不会给应用返回错误信息,所以不会触发异常
  • 邮件被SMTP服务商判定为垃圾邮件:确认生产服务器的出口IP是否已经添加到发件人域名的SPF解析记录中,未备案/未登记的IP发信大概率会被SMTP服务商直接拒收但返回投递成功状态,不会触发应用异常
  • 配置读取错误:生产环境IIS应用池的运行身份权限受限,确认应用读取的SMTP配置(发件人地址、鉴权账号密码、端口参数)和本地开发环境完全一致,避免因权限问题读取到错误的配置项
  • 邮件进入非收件箱分类:让收件人检查垃圾邮件、推广邮件、订阅邮件文件夹,符合垃圾邮件特征的邮件不会进入主收件箱也不会返回报错
  • 开启SMTP交互日志排查:在web.config中添加如下配置,输出完整的SMTP交互日志排查隐性问题:
<system.diagnostics>
  <sources>
    <source name="System.Net" tracemode="includehex" maxdatasize="1024">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\smtp-log\net.log" />
  </sharedListeners>
  <switches>
    <add name="System.Net" value="Verbose"/>
  </switches>
  <trace autoflush="true"/>
</system.diagnostics>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:54:06