微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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编码的纯文本密码可以简单地更改回人类可读的纯文本密码.

原文地址:https://www.jb51.cc/csharp/98305.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐