【问题标题】:Getting an error when trying send an email using SmtpClient in asp.net core application尝试在 asp.net 核心应用程序中使用 SmtpClient 发送电子邮件时出错
【发布时间】:2021-08-31 23:06:29
【问题描述】:

我正在尝试从 asp.net 核心应用程序发送一封电子邮件,但我不断收到错误消息

SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.57 客户端未通过身份验证发送邮件。 [JN2P275CA0038.ZAFP275.PROD.OUTLOOK.COM]

我也尝试检查防火墙规则并增加超时时间,但没有帮助,所以我不确定出了什么问题

这是我发送电子邮件的代码

   SmtpClient client = new SmtpClient("smtp.office365.com")
                    {
                        //Port = 587, //outlook port 587
                        Port = 587, 
                        EnableSsl = true,
                        //UseDefaultCredentials
                        UseDefaultCredentials = false,
                        TargetName = "STARTTLS/smtp.office365.com",
                        DeliveryMethod = SmtpDeliveryMethod.Network,
                        Credentials = new NetworkCredential("myemail@myemails.com","password"),
                    };

                    MailMessage message = new MailMessage()
                    {
                        From = new MailAddress("myemail@myemails.com"),
                        Subject = "New Requisition",
                        Body = "New requisition has been created:" + " " + requisition.RequisitionNo,
                        IsBodyHtml = true,
                    };

                    message.To.Add(SubmissionNotfication.To);
                    //message.CC.Add(SubmissionNotfication.Cc);
                    //var attachment = new System.Net.Mail.Attachment(filePath); //Attachment(string fileName, string mediaType) 
                    //message.Attachments.Add(attachment);
                    client.Send(message);
                }
        

【问题讨论】:

  • 可能有两个错误原因。如果您在使用 Outlook 邮件服务器的公司网络内,则无法访问其他邮件服务器。所有 587 端口都被转发到 Outlook 代理服务器进行身份验证。从家里尝试代码,看看它是否有效。如果您在公司网络内,则可能不需要安全连接,并且使用端口 25 可能会起作用。当您在防火墙内时,不需要额外的保护,加密电子邮件将使病毒检查器难以验证邮件。
  • 使用的密码是否有可能包含一些“外来”字符,例如德语变音符号?
  • hmm.. 很难保证您的配置/设置和客户端是正确的。事实上,在这方面它不太可能是正确的。除此之外,“客户端未通过身份验证发送邮件”。似乎是一个奇怪的消息。关于我对认证和授权的理解,我认为应该写成“Client not [authorized] to send mail”。您是否已验证客户端是否有权针对调用它的 API 执行此操作?
  • 另外,您是否尝试将 IP 地址指定为主机(我不确定 TargetName 部分......也许它没有按名称注册并且无法通过名称解析?)
  • 这个问题本质上是这个stackoverflow.com/questions/6244694/…的副本。虽然那个没有一个公认的答案并且被提出反对测试版。它有几个更现代且与此问题相关的答案。

标签: c# asp.net-core email smtp client


【解决方案1】:

看看How to set up an application to send email using Microsoft 365 or Office 365

您可能必须使用 MX 端点作为发送域并尝试使用端口 25

SmtpClient client = new SmtpClient("yourorganisation.mail.protection.outlook.com")
{
    Port = 25, 
    EnableSsl = true,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential("myemail@myemails.com","password"),
};

【讨论】:

    【解决方案2】:

    您遇到上述错误消息可能有几个原因

    1. 电子邮件用户名和密码不正确
    2. SSL 设置。确保在通过您的应用程序发送电子邮件时启用 SSL 安全性
    3. 您的端口问题。确保您的 ISP 没有阻止端口 25 或 587。您可以使用 telnet 进行检查。

    您可能需要查看有关使用 Outlook 发送电子邮件的教程。如果你使用的是Gmail,那么你可以参考这个帖子https://dotnetblog.asphostportal.com/using-gmail-to-send-email-in-asp-net-core/

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多