我正在尝试设置一些代码,通过Office 365的经过身份验证的SMTP服务发送电子邮件:
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期间客户端未经身份验证发送匿名邮件
at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from)
at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
我已尝试启用网络跟踪,看起来已经建立了安全通信(例如,在日志中我可以看到“STARTTLS”命令的一行,稍后在日志中有一行“远程证书由用户验证为有效。”,以下的Send()
和Receive()
数据不可读作明文,并且似乎没有包含任何TLS / SSH恐慌)
我可以使用完全相同的电子邮件地址和密码登录http://portal.office.com/并使用Outlook电子邮件Web邮件发送和阅读邮件,那么在以编程方式发送电子邮件时可能会导致身份验证失败?
是否有任何方法可以对加密流进行额外调试?
eml.From = eml.Sender;
中指定的地址是否与您正在连接的帐户的电子邮件地址相同?如果将From
字段中指定的电子邮件地址更改为帐户的地址,邮件是否能成功发送?如果是这样,那么很可能是SMTP配置为无法发送看起来来自不同帐户的电子邮件。 - user1666620