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