Windows 8.1上的MailMessage和SmtpClient失败

时间:2014-03-27 20:29:22

标签: smtpclient

我在多个(不是说:所有)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设为truefalse也无关紧要。

使用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无法解决此问题。

1 个答案:

答案 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/

请看这里。我稍后会发现这些链接。

http://social.technet.microsoft.com/Forums/en-US/023d7598-9311-4b84-b1df-81ceda011fe4/bug-smtplivecom-stopped-working-after-win-81-tested-ol2013-win8-my-lan-roaming-user?forum=w81previtpro

这是向后兼容性问题。

这适用于.NET 4框架。如果您使用的是3.5或3,则无法在config中使用。

那么您可以在某处查找主机设置并在那里进行配置。

原因似乎是由于基本64加密无法在您的SMTP服务器上解密。

确定。带回我的要点。考虑到代码适用于某些带有SMTP和旧版本客户端服务器设置的Windows 8计算机,这不太可能是应用程序编码问题。这与传输/身份验证问题更为相关。

控制台应用 使用telnet 在Windows 8.1上 连接到托管的2010交换服务器。

方法:验证/安全/中继

以下是一些更好的检查方法。

身份验证(这适用于sharepoint,但它会讨论您的配置文件)。

计算机密钥

Machine Keys

More Machine keys

客户端证书

Client Certificates and Windows 8

有关证书的更多信息

Certificate Authority

<强> SSL

Here is discussion on routers, SSL and Windows 8.1

Here is discussion on Multiple Authoritative Domains and Windows 8