【问题标题】:Can I send SMTP email through Office365 shared mailbox?我可以通过 Office365 共享邮箱发送 SMTP 电子邮件吗?
【发布时间】:2020-05-01 06:33:05
【问题描述】:

我们正在考虑迁移到 O365;但是,我们开发的软件使用我们当前的 Exchange 服务器向外部用户发送电子邮件,并在发生错误时发送到支持箱。

我一直在对此进行测试,以确保我们现有的代码将继续与 O365 一起使用,但到目前为止,我还不是很成功。

我尝试过使用 .Net 的 SmtpClient 和 MailKit 的 SmtpClient,但似乎都没有。我不断收到错误(这是来自 MailKit 的错误——.Net 错误类似)

“AuthenticationInvalidCredentials:5.7.3 身份验证不成功[*.prod.exchangelabs.com]”

我可以使用我在代码中拥有的凭据登录 OWA——因此我知道这些凭据是有效的。不能通过 O356 发送电子邮件吗?是否需要在 Exchange 中进行任何特殊配置才能实现这一点?

这是我迄今为止尝试过的:

MailKit

var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("Support","support@mydomain.com"));
msg.To.Add(new MailboxAddress("Me","me@mydomain.com"));
msg.To.Add(new MailboxAddress("External User","euser@externaldomain.com"));
msg.Subject = "Test";
msg.Body = new TextPart("plain"){
   Text = "Here is a message for you"
};
using(var client = new SmtpClient()){
    client.ServerCertificateValidationCallback = (s,c,h,e) => true;
    client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what this does.  Have tried with and without
    client.Connect("smtp.office365.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
    client.Authenticate(new NetworkCredential("support@mydomain.com", "supportPwd"));
    client.Send(msg);
    client.Disconnect(true);
}

.Net SmtpClient 代码看起来与 MailKit 代码非常相似。

  1. 有没有办法通过 O365 与许可用户一起发送? (上面的代码)
  2. 是否需要在 Exchange 中或许可用户上进行任何特殊设置才能使其正常工作? (如果 1 的答案是肯定的)
  3. 是否可以通过凭据用户拥有“代理发送”权限的共享邮箱发送电子邮件?

更新

我仍然收到相同的错误消息。我们确实为我们的域用户启用了 MFA。但是,我们有一项政策,当用户从受信任的位置(我们组织的 IP)登录时,他们不需要 MFA。我还将我们的 IP 列为受信任的 IP。在我看来,MFA 不应该是这里的问题。

我知道凭据是正确的。我从代码中复制它们并在登录 M365 时将它们粘贴到登录屏幕中——我很好地进入了。

我做错了什么?

【问题讨论】:

    标签: c# .net smtp office365 mailkit


    【解决方案1】:
    1. 是的,你可以。

    2. 用户设置:

    服务器设置: https://support.office.com/en-us/article/POP-IMAP-and-SMTP-settings-for-Outlook-com-d088b986-291d-42b8-9564-9c414e2aa040

    SMTP server name smtp.office365.com
    
    SMTP port 587
    
    SMTP encryption method STARTTLS
    
    1. 不,你不能。您需要获得许可的用户才能通过 SMTP 发送邮件。

    https://answers.microsoft.com/en-us/msoffice/forum/msoffice_o365admin/set-up-smtp-relay-with-shared-mailbox/d7b98214-9564-432c-b098-525a98c529fb

    我们的一个客户有一个使用 TYPO3 设置的时事通讯系统,我们必须为此创建一个新邮箱。但是,一个简单的就足够了:我们只分配了 Office 365 F1 许可证,而不是 Office 365 商业高级版。

    编辑:还发现了这个:Can Office365 shared mailbox use SMTP?

    【讨论】:

    • 所以这似乎回答了我关于共享邮箱的问题。但是在我的初始代码中,我正在与许可用户合作,这也不起作用——应该吗?
    • @RHarris 是的,它应该。请参阅编辑后的答案。抱歉,第一次回复不完整。
    • @WolfgangJacques 嗨,谢谢您的回答。了解问题和答案,即使使用.NET框架自己的原生SmtpClient也不会被允许?因为它使用 SMTP。但是,如果相同的方式被视为 Legacy Authentication,那么除了从SmtpClient 发送电子邮件之外,我们还有其他发送电子邮件的方式吗?
    • @hiFI,对不起,我不知道。我猜不是,因为 SMTP 是 SMTP。以我的经验,这是微软的许可原则。如果您以许可用户身份进行身份验证,如果您有足够的权限,您可能能够作为共享邮箱发送。关于旧版身份验证我一无所知。
    【解决方案2】:

    对于遇到类似问题的任何人,我发现我的问题是条件访问策略。 Microsoft 提供了一个Baseline Policy: Block Legacy Authentication——它已在我们的 AAD 中打开。

    在查看策略时,它旨在阻止任何不需要 MFA 的身份验证机制。这包括诸如 POP 和 SMTP 之类的东西。一旦我禁用了这个策略,上面列出的代码就可以正常工作了。

    【讨论】:

      【解决方案3】:

      对我来说,只有禁用“安全默认值”才有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 2013-08-22
        • 2019-10-11
        相关资源
        最近更新 更多