我可以通过Office365共享邮箱发送SMTP邮件吗?
Can I send SMTP email through Office365 shared mailbox?
我们正在考虑迁移到 O365;但是,我们开发的软件使用我们当前的 Exchange 服务器向外部用户以及发生错误时的支持箱发送电子邮件。
我一直在对此进行测试,以确保我们现有的代码将继续与 O365 一起工作,但到目前为止,我还不是很成功。
我尝试过使用 .Net 的 SmtpClient 和 MailKit 的 SmtpClient,但似乎都不起作用。我不断收到错误消息(这是来自 MailKit 的错误——.Net 错误类似)
"AuthenticationInvalidCredentials: 5.7.3 Authentication unsuccessful [*.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 代码非常相似。
- 有授权用户可以通过O365发送吗? (上面的代码)
- 是否需要在 Exchange 或许可用户上进行任何特殊设置才能使此工作正常进行? (如果 1 的答案是肯定的)
- 是否可以通过具有凭据的用户具有代理发送权限的共享邮箱发送电子邮件?
更新
我仍然收到相同的错误消息。我们确实为我们的域用户启用了 MFA。但是,我们有一项政策,当用户从受信任的位置(我们组织的 IP)登录时,他们不需要 MFA。我还将我们的 IP 列为可信 IP。在我看来,MFA 不应该是这里的问题。
我知道凭据是正确的。我从代码中复制了它们,并在登录 M365 时将它们粘贴到登录屏幕中——我进入了很好。
我做错了什么?
可以。
用户设置:
SMTP server name smtp.office365.com
SMTP port 587
SMTP encryption method STARTTLS
- 不,你不能。您需要获得许可的用户才能通过 SMTP 发送邮件。
我们的一位客户使用 TYPO3 设置了新闻通讯系统,我们不得不为此创建一个新邮箱。但是,一个简单的就足够了:我们只分配了 Office 365 F1 许可证而不是 Office 365 商业高级版。
编辑:还发现了这个:
对于遇到类似问题的任何人,我发现我的问题是条件访问策略。 Microsoft 提供了一个 Baseline Policy: Block Legacy Authentication
-- 我们的 AAD 中已经打开了它。
在查看该策略时,它旨在阻止任何不需要 MFA 的身份验证机制。这包括诸如 POP 和 SMTP 之类的东西。一旦我禁用了这个策略,上面列出的代码就可以正常工作了。
对我来说,只有禁用“安全默认设置”才有帮助。
我们正在考虑迁移到 O365;但是,我们开发的软件使用我们当前的 Exchange 服务器向外部用户以及发生错误时的支持箱发送电子邮件。
我一直在对此进行测试,以确保我们现有的代码将继续与 O365 一起工作,但到目前为止,我还不是很成功。
我尝试过使用 .Net 的 SmtpClient 和 MailKit 的 SmtpClient,但似乎都不起作用。我不断收到错误消息(这是来自 MailKit 的错误——.Net 错误类似)
"AuthenticationInvalidCredentials: 5.7.3 Authentication unsuccessful [*.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 代码非常相似。
- 有授权用户可以通过O365发送吗? (上面的代码)
- 是否需要在 Exchange 或许可用户上进行任何特殊设置才能使此工作正常进行? (如果 1 的答案是肯定的)
- 是否可以通过具有凭据的用户具有代理发送权限的共享邮箱发送电子邮件?
更新
我仍然收到相同的错误消息。我们确实为我们的域用户启用了 MFA。但是,我们有一项政策,当用户从受信任的位置(我们组织的 IP)登录时,他们不需要 MFA。我还将我们的 IP 列为可信 IP。在我看来,MFA 不应该是这里的问题。
我知道凭据是正确的。我从代码中复制了它们,并在登录 M365 时将它们粘贴到登录屏幕中——我进入了很好。
我做错了什么?
可以。
用户设置:
SMTP server name smtp.office365.com
SMTP port 587
SMTP encryption method STARTTLS
- 不,你不能。您需要获得许可的用户才能通过 SMTP 发送邮件。
我们的一位客户使用 TYPO3 设置了新闻通讯系统,我们不得不为此创建一个新邮箱。但是,一个简单的就足够了:我们只分配了 Office 365 F1 许可证而不是 Office 365 商业高级版。
编辑:还发现了这个:
对于遇到类似问题的任何人,我发现我的问题是条件访问策略。 Microsoft 提供了一个 Baseline Policy: Block Legacy Authentication
-- 我们的 AAD 中已经打开了它。
在查看该策略时,它旨在阻止任何不需要 MFA 的身份验证机制。这包括诸如 POP 和 SMTP 之类的东西。一旦我禁用了这个策略,上面列出的代码就可以正常工作了。
对我来说,只有禁用“安全默认设置”才有帮助。