这应该是非常常规的,对吧?
public static SmtpClient GetSmtpClient() { var client = new SmtpClient { Host = _smtpServer, UseDefaultCredentials = false, Credentials = new NetworkCredential(_smtpUsername, _smtpPassword), Port = _smtpPort, // port 25 EnableSsl = _smtpSsl // false }; return client; } ... var m = new MailMessage { // contents of mail message } using (var server = GetSmtpClient()) { server.Send(m); }
但是server.Send()
扔了一个SmtpException
:
邮件发送失败.---> System.IO.IOException:无法从传输连接中读取数据:net_io_connectionclosed
我的凭证出了什么问题?SMTP服务器上的IP阻止?也许我的ISP阻止了对端口25的传出请求?我在与调试环境相同的机器上下载并安装了Thunderbird,并在那里设置了相同的SMTP凭据,并且它运行良好.
那么为什么它在Thunderbird中有效,而在我的代码中呢?
更新:按照@ tzachs的建议,我下载了Wireshark,发现交易进度是相同的,直到某一点.
雷鸟:
TCP 62 25 ? 50924 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1360 SACK_PERM=1 SMTP 143 S: 220 smtp.somedomain.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 5 Dec 2015 15:46:22 -0500 TCP 54 25 ? 50924 [ACK] Seq=90 Ack=18 Win=5840 Len=0 SMTP 289 S: 250 smtp.somedomain.com Hello my-computer.myisp.com [x.x.60.61], pleased to meet you | 250 ENHANCEDSTATUSCODES | 250 PIPELINING | 250 8BITMIME | 250 SIZE | 250 DSN | 250 ETRN | 250 AUTH LOGIN PLAIN | 250 DELIVERBY | 250 HELP SMTP 82 S: 235 2.0.0 OK Authenticated etc.
SmtpClient:
TCP 62 25 ? 50889 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1360 SACK_PERM=1 SMTP 143 S: 220 smtp.somedomain.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 5 Dec 2015 15:45:08 -0500 TCP 54 25 ? 50889 [ACK] Seq=90 Ack=21 Win=5840 Len=0 SMTP 289 S: 250 smtp.somedomain.com Hello my-computer.myisp.com [x.x.60.61], pleased to meet you | 250 ENHANCEDSTATUSCODES | 250 PIPELINING | 250 8BITMIME | 250 SIZE | 250 DSN | 250 ETRN | 250 AUTH LOGIN PLAIN | 250 DELIVERBY | 250 HELP TCP 54 25 ? 50889 [FIN, ACK] Seq=325 Ack=62 Win=5840 Len=0 TCP 54 25 ? 50889 [ACK] Seq=326 Ack=63 Win=5840 Len=0
请注意,在SmtpClient跟踪中的"高兴见到你"之后,没有任何关于身份验证的信息.不是"接受",不是"失败" - 没有.只是终止连接.
这有什么亮点吗?
另一个更新: Smtp服务器正在运行SendMail,FWIW.该错误特定于此特定Smtp主机; 当我指向不同的服务器时,代码工作正常.