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

Mailkit在Ubuntu20.04服务器发送邮件抛出TimeoutException超时异常

排查解决思路
  • 先验证Ubuntu服务器的出站连通性
    你本地能连通不代表服务器可以,先在Ubuntu服务器上执行命令测试目标SMTP服务465端口的连通性:
    # 用netcat测试
    nc -zv 你的SMTP主机地址 465
    # 用telnet测试
    telnet 你的SMTP主机地址 465
    # 验证DNS解析是否正确
    nslookup 你的SMTP主机地址
    
    注意你之前开放的ufw规则是入站465端口,和程序主动对外连接的出站规则无关,默认ufw允许所有出站,如果你改了出站规则需要单独放行465端口的出站请求。
  • 修正SecureSocketOptions配置
    465端口默认是隐式SSL的SMTPS协议,不要用SecureSocketOptions.Auto的自动识别逻辑,Linux环境下自动识别经常出现协议匹配错误,直接显式指定为SecureSocketOptions.SslOnConnect即可。
  • 验证SSL/TLS握手是否正常
    执行openssl命令测试TLS握手是否能正常完成,排除CA证书缺失的问题:
    openssl s_client -connect 你的SMTP主机地址:465
    
    如果返回证书错误,更新Ubuntu的CA证书库即可:
    sudo update-ca-certificates
    
  • 代码层面优化
    显式设置SMTP连接超时时间,避免默认超时过短导致的异常,调整后的连接代码示例:
    using (var smtp = new SmtpClient())
    {
        // 显式设置30秒超时
        smtp.Timeout = 30000;
        // 改用显式SslOnConnect参数
        smtp.Connect(Options.HostAddress, Options.HostPort, SecureSocketOptions.SslOnConnect);
        smtp.Authenticate(Options.HostUsername, Options.HostPassword);
        smtp.Send(email);
        smtp.Disconnect(true);
    }
    
    还可以开启Mailkit的调试日志,打印连接全流程的细节,定位具体卡在哪一步。
  • 检查上层安全策略限制
    这是最常见的问题:几乎所有主流云服务商都会默认封禁服务器对外的25、465、587等邮件端口的出站请求,你需要登录云服务商的控制台,在安全组/网络防火墙规则中放行465端口的出站请求。
    另外检查Ubuntu的AppArmor、SELinux等安全模块是否限制了你的程序对外发起网络请求,如果是容器部署还需要检查容器的网络策略是否允许对外访问465端口。
  • 代理配置检查
    如果你的Windows本地配置了全局代理可以正常访问SMTP服务,Ubuntu服务器没有配置对应代理也会导致连接失败,需要为程序配置对应代理后再测试。

内容的提问来源于stack exchange,提问作者Severin.Hersche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:03