我们有一个 Microsoft 365 企业帐户,我们希望使用该帐户从 Azure(Azure 应用服务)中托管的 .NET Core C# Blazor 应用程序发送电子邮件。
我们遵循本文档的选项 3:配置连接器以使用 Microsoft 365 或 Office 365 SMTP 中继发送邮件,以便在我们的 365 帐户的 Exchange 中设置外部中继。
当我们的应用服务计划设置为免费套餐时,我们能够从 Azure 中的 Blazor 应用程序从使用我们的域 ([email protected]) 的电子邮件地址成功发送电子邮件到外部 Gmail 地址,从而证明继电器正在工作。
但是,一旦我们将应用服务计划升级到付费级别(我已经尝试过基本 B1 和标准 S1),电子邮件将无法发送,并出现以下错误:
System.Net.Mail.SmtpException:邮箱不可用。服务器 响应是:5.7.64 TenantAttribution;中继访问被拒绝 [“”的验证状态为空证书]
当我将应用服务计划更改回免费套餐时...它会再次运行。还有其他人遇到过这种情况吗,或者可能知道为什么电子邮件不会从付费的 Azure 应用服务计划发送,但会从免费的 Azure 应用服务计划发送?
在我们的 Blazor 应用程序中,我有一个调用以下方法的按钮:
private async Task SendEmail()
{
MailMessage msg = new MailMessage
{
From = new MailAddress("[email protected]"),
Subject = "365 Test",
Body = "Hello, this is a test."
};
msg.To.Add(new MailAddress("someexternalema[email protected]"));
await EmailService.SendAsync(msg);
}
这会调用我们的电子邮件服务:
public interface ITestEmailService
{
Task SendAsync(MailMessage mailMessage);
}
public class TestEmailService : ITestEmailService
{
private readonly NetworkCredential networkCredentials;
private readonly SmtpClientConfiguration smtpClientConfiguration;
public TestEmailService(SmtpClientConfiguration smtpClientConfiguration)
{
this.smtpClientConfiguration = smtpClientConfiguration;
networkCredentials = new NetworkCredential
{
UserName = smtpClientConfiguration.Username,
Password = smtpClientConfiguration.Password
};
}
public async Task SendAsync(MailMessage mailMessage)
{
using var smtpClient = new SmtpClient();
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = networkCredentials;
smtpClient.Host = smtpClientConfiguration.Host;
smtpClient.Port = smtpClientConfiguration.Port;
smtpClient.EnableSsl = smtpClientConfiguration.Ssl;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
if (mailMessage != null)
await smtpClient.SendMailAsync(mailMessage);
}
}
我们的应用程序设置如下:
"SmtpClientConfiguration": {
"Username": "",
"Password": "",
"Host": "<our company MX record>",
"Port": 25,
"Ssl": true
},
评论中的后续行动:
当您执行缩减操作时,您的应用程序的出站 IP 地址集会发生变化。因此,该问题可能是由于 IP 地址更改造成的。如果尚未完成,您可能需要更新 Microsoft 365 帐户中的 SMTP 中继配置以包含新的 IP 地址:当出站 IP 更改时
此外,Azure 应用服务支持两种类型的 SSL 连接:服务器名称指示 (SNI) SSL 连接和 IP 地址 SSL 连接。免费和共享服务计划不支持 SSL。 请参阅:排查 Azure 中的出站 SMTP 连接问题