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

.NET中MailKit连接Exchange Server超时,EASendMail可正常发件的问题

解决MailKit/System.Net.Mail超时但EASendMail成功发送邮件的问题

核心差异在于协议选择:EASendMail明确使用了ServerProtocol.ExchangeEWS(Exchange Web Services)协议,而你当前的MailKit和System.Net.Mail代码都采用SMTP协议连接,但你的邮件服务器可能仅支持EWS而非SMTP(或SMTP端口25未开放/受限)。

解决思路

1. 改用MailKit的Exchange EWS客户端

MailKit支持Exchange EWS协议,替换原SMTP客户端代码即可:

var host = "mail.company.com";
var userName = "username";
var password = "password";
var senderEmail = "username@company.com";

var message = new MimeMessage();
message.From.Add(new MailboxAddress("", senderEmail));
message.To.Add(new MailboxAddress("", "test@company.com"));
message.Subject = "test email";
var body = new BodyBuilder { TextBody = "testBody" };
message.Body = body.ToMessageBody();

// 使用EWS客户端替代SMTP客户端
using (var client = new ExchangeWebServiceClient(new Uri($"https://{host}/EWS/Exchange.asmx")))
{
    client.Credentials = new NetworkCredential(userName, password);
    // 仅测试环境建议忽略证书验证,生产环境需配置合法证书
    client.ServerCertificateValidationCallback = (s, cert, chain, errors) => true;
    client.Send(message);
}

2. 验证SMTP服务可用性(可选)

如果坚持要用SMTP,先确认邮件服务器的SMTP服务状态:

  • 用telnet mail.company.com 25测试端口连通性
  • 联系管理员确认SMTP服务是否开启、端口是否正确、是否需要NTLM等特殊认证
  • 调整MailKit的连接参数尝试适配:
    smtp.Timeout = 30000; // 设置30秒超时
    smtp.Connect(host, port, SecureSocketOptions.None); // 端口25通常不加密
    // 若需NTLM认证
    smtp.Authenticate(new SaslMechanismNtlm(userName, password));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:35:10