gpt4 book ai didi

smtpclient - MailMessage 和 SmtpClient 在 Windows 8.1 上失败

转载 作者:行者123 更新时间:2023-12-04 08:38:35 25 4
gpt4 key购买 nike

我在多台(不是说:所有)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 还是控制台应用程序中运行并不重要。
设置 defaultCredentialstruefalse也无所谓。

使用 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不修复它。

最佳答案

这可能与此错误有关: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 基本解释都指向您的交换服务器上的向后兼容性问题。由于解释问题,Windows 8 正在向它抛出一些东西,而 Exchange 折叠起来。

更多的客户端相关,但沿着相同的路线试图避免碰撞 64base 加密/解密问题......这是客户端的一个解决尝试,它基本上使 SSL 身份验证无用(留下这个只是为了说明人们正试图从客户端处理这个)。查看是否可以在 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,它将无法在配置中工作。

那么你会在某处寻找你的主机设置并在那里配置它。

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

好的。带回我的主要观点。考虑到代码可以在一些使用 SMTP 和旧版本客户端服务器设置的 Windows 8 机器上运行,这不太可能是应用程序编码问题。这与传输/身份验证问题更相关。

控制台应用
使用远程登录
在 Windows 8.1 上
连接到托管的 2010 Exchange 服务器。

方法:认证/安全/中继

这里有一些更好的东西需要检查。

身份验证(这是针对共享点的,但它涉及您的配置文件)。

机器 key

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

关于smtpclient - MailMessage 和 SmtpClient 在 Windows 8.1 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com