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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...