【发布时间】:2016-06-15 13:53:32
【问题描述】:
我正在尝试设置一些代码以通过 Office 365's authenticated SMTP service 发送电子邮件:
var _mailServer = new SmtpClient();
_mailServer.UseDefaultCredentials = false;
_mailServer.Credentials = new NetworkCredential("test.user@mydomain.com", "password");
_mailServer.Host = "smtp.office365.com";
_mailServer.TargetName = "STARTTLS/smtp.office365.com"; // same behaviour if this lien is removed
_mailServer.Port = 587;
_mailServer.EnableSsl = true;
var eml = new MailMessage();
eml.Sender = new MailAddress("test.user@mydomain.com");
eml.From = eml.Sender;
eml.to = new MailAddress("test.recipient@anotherdomain.com");
eml.Subject = "Test message";
eml.Body = "Test message body";
_mailServer.Send(eml);
这似乎不起作用,我看到了一个异常:
SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.57 SMTP;在 MAIL FROM 期间,客户端未通过身份验证发送匿名邮件
在 System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from)
在 System.Net.Mail.SmtpTransport.SendMail(MailAddress 发件人,MailAddressCollection 收件人,String deliveryNotify,SmtpFailedRecipientException& 异常)
在 System.Net.Mail.SmtpClient.Send(MailMessage 消息)
我试过enabling network tracing,似乎建立了安全通信(例如,我在日志中看到“STARTTLS”命令的一行,后来日志中有一行“远程证书已验证为用户有效。”,并且以下 Send() 和 Receive() 数据不能作为纯文本读取,并且似乎不包含任何 TLS/SSH 恐慌)
我可以使用相同的电子邮件地址和密码登录http://portal.office.com/ 并使用 Outlook 电子邮件网络邮件发送和阅读电子邮件,那么以编程方式发送电子邮件时可能导致身份验证失败的原因是什么?
有没有办法额外调试加密流?
【问题讨论】:
-
eml.From = eml.Sender;中指定的地址是否与您要连接的帐户的电子邮件地址相同?如果您将From字段中指定的电子邮件地址更改为帐户的电子邮件地址,电子邮件是否发送成功?如果是这样,则可能是 SMTP 配置为无法发送看似来自不同帐户的电子邮件。 -
如果只设置了
From,而没有指定Sender,它仍然会失败。在所有情况下,From匹配NetworkCredentials -
在这种情况下我没有想法,否则你的代码看起来很好。如果您确实找到了解决方案,可以在这里发布吗?我有兴趣找出原因。
-
Client was not authenticated to send anonymous mail during MAIL FROM表示您正在尝试发送匿名邮件,这意味着它无法识别您的From地址。 -
@jstedfast 为什么当我可以使用它登录 Office 365 时它无法识别发件人?
标签: c# email smtp office365 smtpclient