c# – 使用SmtpClient发送邮件时,“服务器提交了协议违规”

前端之家收集整理的这篇文章主要介绍了c# – 使用SmtpClient发送邮件时,“服务器提交了协议违规”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用SmtpClient类发送邮件消息.

这是我使用的代码

SmtpClient smtpClient = new SmtpClient("Host",25);
NetworkCredential basicCredential =
new NetworkCredential("UserName","Password");
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress("me@domain.com");
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
message.From = fromAddress;
message.Subject = "test send";
message.IsBodyHtml = true;
message.Body = "<h1>hello</h1>";
message.To.Add("mail@domain.com");
smtpClient.Send(message);

但它总是抛出异常:

The server committed a protocol violation The server response was: UGFzc3dvcmQ6

我找不到原因.如果有人遇到这样的事情,请告诉我该怎么做.

解决方法

这对我来说就像SmtpClient身份验证在某种程度上是不合时宜的.

一些身份验证机制是“客户端:使用用户名和密码请求身份验证,服务器:成功/失败”其他人是“客户端:使用用户名请求身份验证,服务器:请求密码,客户端:使用密码回复,服务器:成功/失败”.

看起来SmtpClient期待前者,而你的服务器期待后者.

作为dave wenta suggested,会话日志会告诉您SmtpClient尝试使用的auth机制,但它也会说明服务器支持的auth机制.

通常发生的是服务器提供了许多验证选项,客户选择它将使用哪一个.那里的行为应该由所选择的协议决定.我希望SmtpClient课程能为你解决这个问题,但我担心我从未使用过那个特定的课程.

还要记住 – 如果您要在此处发布日志,请在记录会话之前更改为一次性密码,因为base64编码的纯文本密码可以简单地更改回人类可读的纯文本密码.

猜你在找的C#相关文章