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

Azure Kubernetes Service中C#调用SMTP发邮件失败该如何配置

AKS部署SendGrid SMTP发邮件失败解决方案

前置背景

现有配置如下:

  • 运行在Linux容器中的C#代码,通过SMTP客户端实现邮件发送功能
  • SMTP中继采用SendGrid完成配置
  • 程序部署在Azure AppService中运行正常,部署到AKS后出现连接中断报错

报错信息

Failed to send e-mail notification using SMTP because some error occured : System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: The connection was closed.
中文释义:SMTP发送邮件通知失败:.NET SMTP异常 - 邮件发送失败,传输连接读取数据失败,连接已被关闭。

排查及修复步骤

1. 修正端口配置

你当前放行的597端口为无效端口,SendGrid官方SMTP服务仅开放如下端口:

  • 587端口(TLS加密传输,官方推荐)
  • 465端口(SSL加密传输)
  • 25端口(未加密,多数云服务商默认拦截不推荐使用)
    首先修正SMTP客户端的端口配置,同时调整AKS关联NSG的出站规则放行对应端口的请求。

2. 排查AKS集群网络限制

  • 确认集群是否配置了Kubernetes网络策略(NetworkPolicy)、Calico规则或Azure Policy出口封锁,若有需新增规则放行Pod到smtp.sendgrid.net对应SMTP端口的出口流量
  • 确认集群出口使用的NAT网关、公共负载均衡的出站规则没有拦截对应端口,同时确认出口公网IP未被SendGrid列入黑名单

3. 检查容器基础配置

  • 确认Linux容器镜像已安装ca-certificates根证书包,TLS加密传输场景下缺少根证书会导致握手失败被断开连接,可在Dockerfile中添加如下命令安装:
    RUN apt update && apt install -y ca-certificates
    
  • 确认C# SMTP客户端已开启TLS配置,SmtpClient.EnableSsl属性需设置为true,SendGrid要求所有传输必须加密

4. 连通性验证

进入异常Pod中执行如下命令验证网络连通性:

  • 验证587端口连通:nc smtp.sendgrid.net 587
  • 验证465端口连通:openssl s_client -connect smtp.sendgrid.net:465
    若命令执行后能正常建立连接则网络层面无拦截,需进一步检查代码配置;若无法连接则逐层排查Pod网络策略、集群出口规则、NSG配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:36:04