我在多个(不是说:所有)Windows 8.x计算机上面临以下问题:
运行这段代码:
var message = new MailMessage();
message.From = new MailAddress("sender@foo.bar.com");
message.To.Add(new MailAddress("recipient1@foo.bar.com"));
message.Subject = "This is my subject";
message.Body = "This is the content";
var client = new SmtpClient();
client.Send(message);
配置:
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
针对托管的Exchange Server会导致一些问题,例如5.7.1
SMTP错误(未经过身份验证,需要base64等)
在Windows Server 2008 R2,Windows Server 2012或Windows 7上运行相同的代码按预期工作... 转动防火墙没有用。
我在Windows 8.1机器上缺少同样的魔力吗?
代码是在IIS还是控制台应用程序中运行并不重要。
将defaultCredentials
设为true
或false
也无关紧要。
使用Windows telnet客户端发送邮件也没有任何问题。
更新: 这是WireShark SMTP日志:
C: EHLO <LOCALMACHINENAME>
S: 250 mail.myhostedexchange.org Hello [<IP>] | 250 SIZE 104857600 | 250 PIPELINING | 250 DSN | 250 ENHANCEDSTATUSCODES | 250 STARTTLS | 250 AUTH GSSAPI NTLM LOGIN | 250 8BITMIME | 250 BINARYMIME | 250 CHUNKING
C: AUTH gssapi <base64 encoded string>
S: 334 <base64 encoded string>
C: base64 username
S: 334 <base64 encoded string>
C: base64 password
S: 535 5.7.3 Authentication unsuccessful
更新2: 我比较了Windows 8.1机器和Windows 7机器的Wireshark输出(一切正常):
Windows 7机器发送如下内容:
C: AUTH gssapi <base64encoded>NTLMSSP + some encoded chars.
Windows 8机器发送如下内容:
C: AUTH gssapi <somehowencodedchars>Token Signing Public Key<somehowencodedchars>WELLKNOWN:PKU2U<somehowencodedchars>SMTPSVCmail.myhostedexchange.org
更新3:
我尝试使用SendGrid,它在Windows 8.x计算机上运行良好。 SendGrid和我的托管Exchange之间的区别在于SendGrid仅支持
250-AUTH=PLAIN LOGIN
这类似于我的Telnet登录体验。
更新4:
EnableSSL=true
无法解决此问题。
答案 0 :(得分:0)
这可能与此错误相关:https://connect.microsoft.com/VisualStudio/feedback/details/785710/mailmessage-subject-incorrectly-encoded-in-utf-8-base64但这只是主题标题而非身份验证。继续阅读!
在我改变答案之前,我指的是Exchange服务器问题。编码CSR。 (但随后改变了我对客户端的方法,看看可以在那里做什么,因为看起来服务器端的周末变化会有较低的概率。但话又说它可能是正确的方法。
我已获取该信息并将其恢复原状:
Create a new CSR on the Exchange server and reissue the certificate
并查看这篇文章,其中base64请求交换但失败了。所以Exchange Server必须修改一些东西。
http://www.billmorefield.com/index.php/2013/11/29/encoding-csr-on-exchange-2010/
我看到很多针对各种不同事物的64种基本解释,指出了Exchange服务器上的向后兼容性问题。由于解释问题,Windows 8正在抛出一些东西并且Exchange折叠。
更多客户端相关,但沿着相同的路线试图避免碰到64base加密/解密问题...这是一个来自客户端的尝试,基本上使SSL auth无用(留下这只是为了说明人们试图从客户端接近这一点)。查看是否可以在Web配置设置中设置SMTPEnableSSL = N或false。测试并查看它是否有效。我认为SSL可能是问题所在。
http://theoldsewingfactory.com/2011/01/06/enable-ssl-in-web-config-for-smtpclient/
请看这里。我稍后会发现这些链接。
这是向后兼容性问题。
这适用于.NET 4框架。如果您使用的是3.5或3,则无法在config中使用。
那么您可以在某处查找主机设置并在那里进行配置。
原因似乎是由于基本64加密无法在您的SMTP服务器上解密。
确定。带回我的要点。考虑到代码适用于某些带有SMTP和旧版本客户端服务器设置的Windows 8计算机,这不太可能是应用程序编码问题。这与传输/身份验证问题更为相关。
控制台应用 使用telnet 在Windows 8.1上 连接到托管的2010交换服务器。
方法:验证/安全/中继
以下是一些更好的检查方法。
身份验证(这适用于sharepoint,但它会讨论您的配置文件)。
计算机密钥
客户端证书
Client Certificates and Windows 8
有关证书的更多信息
<强> SSL 强>
Here is discussion on routers, SSL and Windows 8.1
Here is discussion on Multiple Authoritative Domains and Windows 8