使用TLS和SmtpAuth在.Net 4 / C#中发送带有System.Net.Mail.SmtpClient的电子邮件,可在本地使用,但不能在生产服务器上运行(win 2008 r2)

时间:2011-10-21 09:36:24

标签: c# .net .net-4.0

我在我的开发机器上成功运行此代码(Win 7,VS 2010)

SmtpClient client = new SmtpClient("servername.domain.tld");
client.Port = 25;
client.Credentials = new NetworkCredential("username", "password");
client.EnableSsl = true;
client.Send(new MailMessage("destination@domain.tld", "sender@domain.tld", "subject", "body"));

我的smtp服务器是在debian上运行的Exim 4.7,启用了TLS和SmtpAuth。它不支持中继,但如果用户进行身份验证,他可以向任何人发送邮件。

当我在Win 2008 R2生产服务器上运行上面的代码时,我收到以下错误消息:

  

System.Net.Mail.SmtpException:服务器不支持安全连接。

当我谷歌这个时,我读了关于连接到端口465等的分配,但这不是传统的SMTP over SSL aka。 ssmtp中/ SMTPS。您可以在此处阅读更多内容:http://www.exim.org/exim-html-current/doc/html/spec_html/ch39.html

所以我能理解端口25 正确它也可以在我的开发机器上使用端口25,TLS等。

当我谷歌这个时出现的另一件事是尝试

  

client.EnableSsl = false;

当我这样做时,我收到以下错误:

  

System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应是:不允许中继

这是正确的,因为如果客户端未进行身份验证,我们不会中继邮件。

以下是来自服务器的失败会话的smtp服务器输出:

2011-10-21 11:23:43 [2022] SMTP connection from [source.ip]:51712 I=[smtp.ip]:25 (TCP/IP connection count = 1)
2011-10-21 11:23:48 [2072] ident connection to source.ip timed out
2011-10-21 11:23:48 [2072] SMTP connection from servername.domain.tld (servername) [source.ip]:51712 I=[smtp.ip]:25 lost
2011-10-21 11:23:48 [2072] no MAIL in SMTP connection from servername.domain.tld (servername) [source.ip]:51712 I=[smtp.ip]:25 D=0s C=EHLO

这是来自我的开发机器的工作会话的smtp服务器输出:

2011-10-21 12:04:05 [2022] SMTP connection from [source.ip]:63294 I=[smtp.ip]:25 (TCP/IP connection count = 1)
2011-10-21 12:04:10 [2077] ident connection to source.ip timed out
2011-10-21 12:04:11 [2077] 1RHBxT-0000XV-7P  for to@domain.tld
2011-10-21 12:04:11 [2079] cwd=/var/spool/exim4 3 args: /usr/sbin/exim4 -Mc 1RHBxT-0000XV-7P
2011-10-21 12:04:12 [2079] 1RHBxT-0000XV-7P => to@domain.tld F= P= R=dnslookup T=remote_smtp S=1058 H=mx2.hotmail.com [65.55.37.104]:25 C="250   Queued mail for delivery" QT=1s DT=1s
2011-10-21 12:04:12 [2079] 1RHBxT-0000XV-7P Completed QT=1s

任何人都对我能做些什么来深入了解这项工作?

谢谢,goddang

1 个答案:

答案 0 :(得分:0)

如果您的Windows服务器不允许出站SSL,则需要处理防火墙配置。如果暂时禁用防火墙,该错误应该消失。

SSL不会改变您的身份验证方式,它只会加密连接。禁用SSL后,您已成功与SMTP服务器通信,但您因无效凭据而被拒绝。

至于服务器拒绝您的凭据的原因,这可能是由任意数量的问题引起的。它可能很简单,因为用户名/密码不正确或复杂,因为服务器只允许来自机器子集的连接。