.net - SMTP 服务器需要安全连接,或者客户端未仅在 Azure 上进行身份验证
问题描述
我有一个应用程序,用户使用 Outlook smtp 服务器发送电子邮件。此应用程序在本地主机上运行良好,具有相同的凭据。但是当我在 Azure 上发布我的 ASP.NET Core 应用程序时,我收到以下异常:
SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.57 SMTP;在 MAIL FROM [SN6PR04CA0015.namprd04.prod.outlook.com] 期间,客户端未通过身份验证发送匿名邮件
要发送电子邮件,我正在使用代码:
MailMessage mail = new MailMessage(
EmailServiceConfiguration.SenderMail(),
addresses.Aggregate((seed, value) => seed += "," + value)
);
SmtpClient client = new SmtpClient();
client.Port = 587;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential("account@contoso.com", "mypassword");
client.Host = "smtp-mail.outlook.com";
mail.Subject = "My subject";
mail.Body = "My text";
mail.IsBodyHtml = true;
client.Send(mail);
请记住,此异常仅在应用程序在 azure 上运行时发生,本地主机正常工作。
谢谢。
解决方案
Azure 致力于阻止垃圾邮件并减少负面 IP 声誉对客户造成的影响。从 2017 年 11 月 15 日开始,从虚拟机 (VM) 直接向外部域(例如 Outlook.com、gmail.com)发送出站电子邮件将仅适用于某些订阅类型。对于大多数新订阅,使用 TCP 端口 25(主要用于未经身份验证的电子邮件传递)的出站 SMTP 连接将被阻止(更多详细信息请点击此处)。
推荐阅读
- swift - UITableView 没有出现在视图中?
- c++ - 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串我如何在我的一个字符串中跳过一个字符
- javascript - 在选择框中选择选项时填充使用 jquery 动态生成的输入
- r - 堆叠条形图,x 轴上的样本根据“早期”和“晚期”组排列
- apache-spark - Databricks 和 Spark 中的公用表表达式 (CTE)
- angular - Angular:如何对 HostBinding 属性的更改进行单元测试
- memory-leaks - 使用 LitElement 泄漏的 eventContext
- html - 字体不适用于 React 应用程序
- airflow - 我无法通过 CLI 在清晰的气流中使用开始日期和结束日期
- r - 与多个类别的定性数据比较