如何使用域Windows身份验证从Office365帐户发送电子邮件

时间:2019-01-11 02:26:00

标签: c# office365

我正在开发一个将从Windows服务执行的控制台应用程序,该服务需要使用与运行Windows服务的域帐户相关联的域帐户发送电子邮件。

在我的开发机中,我登录了一个域帐户,该域帐户将与运行Windows服务的域相同,但无法使其正常运行。

对于此开发,我使用.NET 4.6.1和nuget包FluentEmail.Smtp

我的代码如下:

Email.DefaultSender = new SmtpSender(new SmtpClient
{
    UseDefaultCredentials = true,
    EnableSsl = true,
    Host = "smtp.office365.com",
    TargetName = "STARTTLS/smtp.office365.com",
    Port = 587,
    DeliveryMethod = SmtpDeliveryMethod.Network
});

await Email.From("myname@mycompanydomain.com", "Some tittle")
     .To(emailListObject)
     .Subject("Some subject")
     .Body("Some body", true)
     .SendAsync();

使用此代码,我得到以下异常:

Unable to connect to the remote server

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 52.96.9.178:587

   at System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
   at System.Net.Mail.SmtpTransport.EndGetConnection(IAsyncResult result)
   at System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)

注意:从我的机器上,我可以ping异常中提到的IP

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

对于初学者来说,您可能想看看official document - direct send。您会注意到,在正确配置Exchange服务器的同时,还有很多问题(例如TLS安全性)。

在您的问题中没有更多信息的情况下,可以回答的内容非常有限,但是作为替代解决方案,可以看看直接发送。 (这要省得多)。

直接发送的设置

直接在设备或应用程序中输入以下设置。

  • 服务器/智能主机。使用您的MX终结点,例如contoso-com.mail.protection.outlook.com
  • 端口。使用端口25
  • TLS / StartTLS。启用它。
  • 电子邮件地址。。将任何电子邮件地址用于您的Office 365接受域之一。此电子邮件地址不需要邮箱。

Microsoft建议添加SPF记录,以避免将邮件标记为垃圾邮件。如果您是从静态IP地址发送的,则将其添加到域注册商的DNS设置中的SPF记录中,如下所示:

DNS entry   Value
SPF         v=spf1 ip4:<Static IP Address> include:spf.protection.outlook.com ~all