c# - 从共享邮箱使用 C# 中的 EWS 发送电子邮件

标签 c# exchangewebservices

IT 部门正在从创建服务帐户转向共享邮箱。我们所有的部门电子邮件帐户都被转换为共享邮箱。到目前为止,我一直在使用 EWS 通过以下代码从我们的 Web 应用程序向收件人发送电子邮件:

ExchangeService service = new ExchangeService();
service = new ExchangeService(ExchangeVersion.Exchange2013_SP1)
{
     Credentials = new NetworkCredential("dept_email@example.com", "Password1"),
     Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")
            };

     email = new EmailMessage(service);
     email.Body = new MessageBody(BodyType.HTML, Message.ToString());
     email.ToRecipients.Add(Recipient.email);
     email.SendAndSaveCopy();
}

如何使用共享邮箱发送电子邮件而不是硬编码电子邮件地址和密码?我使用的电子邮件地址是不符合当前密码安全标准的服务帐户。正是因为这个原因,他们正在将部门电子邮件更改为共享邮箱。

我正在使用从 Active Directory 对用户进行身份验证的 Windows 身份验证。

最佳答案

如果您想继续使用 EWS,您可能仍然需要一个服务帐户才能使用共享邮箱(除非您的应用可以模拟对共享邮箱具有 SendAS 权限的用户),例如,您授予服务帐户 SendAs 权限您要发送的共享邮箱,然后将发件人地址和已发送邮件文件夹设置为共享邮箱的地址(如果您想要将邮件副本保存在共享邮箱已发送邮件文件夹中)。例如

email.From = new EmailAddress("smtpaddress@domain.com"); 
Mailbox SharedMailbox = new Mailbox("smtpaddress@domain.com");
FolderId SharedMailboxSendItems = new FolderId(WellKnownFolderName.SentItems, SharedMailbox);
email.SendAndSaveCopy(SharedMailboxSendItems);

让您摆脱服务帐户的更好方法是使用新的 REST API https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations然后创建一个仅有权发送电子邮件并利用证书身份验证的应用程序 https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365 .这应该允许您摆脱对服务帐户的任何许可要求,并且还提供了一个更安全的应用程序,因为您不再拥有硬编码的凭据,并且您的应用程序只能访问它需要做的事情,没有其他任何事情。

关于c# - 从共享邮箱使用 C# 中的 EWS 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44639791/

相关文章:

php - 未捕获的 soapfault 异常

javascript - 为什么具有许多有效数字的数字在 C# 和 JavaScript 中的处理方式不同?

c# - 以 MVVM 方式导出 DataGrid

c# - 在 ASP.Net 中定义自己的 TlsCipherSuite

android - 在 Android 中通过 HTTPS 使用 SOAP+XML 请求 Exchange Web 服务 2007/2010

x509 - 交换 Web 服务 x509 证书

exchange-server - Item.Id 和 EmailMessage.InternetMessageId 有什么区别

c# - 使用C#将文件上传到Web服务器

c# - DispatcherTimer 等待循环

exchangewebservices - 使用托管 API 2.2 的 EWS 调用永远不会返回