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
相关产品推荐
相关产品推荐

