在.net 4/ c#中使用TLS和SmtpAuth使用System.Net.Mail.SmtpClient发送电子邮件

本文关键字:Net System 使用 Mail SmtpClient 电子邮件 SmtpAuth net TLS | 更新日期: 2023-09-27 18:12:11

我在我的开发机器(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: Server does not support secure connections.

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

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

另一个结果是当我用谷歌搜索

客户端。EnableSsl = false;

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

System.Net.Mail。SmtpFailedRecipientException:邮箱不可用。服务器的响应是:relay not allowed

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

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

2011-10-21 11:23:43 [2022] SMTP连接来自[source]。ip): 51712 I = [smtp。ip]:25 (TCP/ip连接数= 1)2011-10-21 11:23:48[2072]识别连接到源。IP超时2011-10-21 11:23:48 [2072] SMTP连接从servername.domain.tld (servername)[来源。ip): 51712 I = [smtp。ip): 25丢失2011-10-21 11:23:48[2072]从servername.domain.tld (servername)的SMTP连接中没有MAIL。ip): 51712 I = [smtp。[qh]:25 D=0 C= 0之前

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

<>之前2011-10-21 12:04:05 [2022] SMTP连接来自[source]。ip): 63294 I = [smtp。ip]:25 (TCP/ip连接数= 1)2011-10-21 12:04:10[2077]识别连接到源。IP超时2011-10-21 12:04:11 [2077] 1RHBxT-0000XV-7P for to@domain.tld2011-10-21 12:04:11 [2079] cwd=/var/spool/exim4 3个参数:/usr/sbin/exim4 - mc1rhbxt - 0000xv - 7p2011-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排队邮件等待投递" QT=1s DT=1s2011-10-21 12:04:12 [2079] 1RHBxT-0000XV-7P完成QT=1s之前

有谁知道我该怎么做才能做到这一点吗?

谢谢,goddang

在.net 4/ c#中使用TLS和SmtpAuth使用System.Net.Mail.SmtpClient发送电子邮件

如果您的Windows服务器不允许出站SSL,则需要对防火墙进行配置。如果你暂时禁用防火墙,这个错误应该会消失。

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

至于为什么服务器拒绝了您的凭据,这可能是由许多问题引起的。它可以简单到用户名/密码不正确,也可以复杂到服务器只允许来自一部分机器的连接。