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

问题描述 投票:3回答:1

我在我的开发机器上成功运行此代码(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("[email protected]", "[email protected]", "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 [email protected]
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 => [email protected] 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

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

谢谢,亲爱的

c# .net .net-4.0
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.