.NET应用程序

时间:2016-01-12 22:13:29

标签: c# .net email smtp office365

我们有许多通过Office 365 Exchange帐户发送电子邮件的C#(。net 4)应用。这种方法在90%的时间内都能正常工作。但偶尔会出现以下错误:

  

SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应是:5.7.57 SMTP;客户端未通过身份验证,无法在MAIL FROM期间发送匿名邮件。

以下是代码:

private void SendEmail(string strTo, string strFrom, string strMessage, string strSubject, bool htmlFormat = true)
    {
        System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
        System.Net.Mail.MailAddress mto = new System.Net.Mail.MailAddress(strTo);
        System.Net.Mail.MailAddress mfrom = new System.Net.Mail.MailAddress(strFrom);
        mail.Subject = strSubject;
        mail.From = mfrom;
        mail.To.Add(mto);
        mail.Body = strMessage;
        mail.IsBodyHtml = htmlFormat;
        System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient("smtp.office365.com", 587);
        mailClient.Timeout = 1000000;
        mailClient.EnableSsl = true;
        mailClient.UseDefaultCredentials = false;
        mailClient.Credentials = new System.Net.NetworkCredential("my@emailaddress.com", "mypassword");
        mailClient.Send(mail);
    }

我之前在这里看到过有关此错误消息的问题,但我还没有找到任何解释,为什么它可能只发生间歇性。错误消息令人困惑,因为我没有尝试匿名发送,我已经在使用EnableSsl。 (注意:如果我删除了Credentials行或EnableSSL行,那么每次都会出现此错误)

编辑:作为测试,我制作了一个简单的应用程序,每分钟给我发送一次电子邮件。在一次爆炸之前,我通常会收到12到25封成功的电子邮件。然后它会再次恢复到正常状态12-25,再次爆发。

编辑:由于问题太零散,并且涉及从365 SMTP服务器返回的错误消息,我真的不认为它是代码本身的问题。鉴于此,我不确定我是否正确地标记了这个问题,或者如果SO甚至是最好的社区。如果你们中的任何一位Stack Exchange资深人士认为这样可以更好地安置在不同的社区中,我会全力以赴。我自己有点新鲜。

任何想法都表示赞赏!

3 个答案:

答案 0 :(得分:1)

我打开了一个关于Microsoft 365支持的案例,他们告诉我,我不是唯一遇到此问题的人。当问题发生时,他们让我尝试捕获SMTP日志,但我们从未发现任何非常有用的东西。 MS技术还表示,他将尝试在后端的邮件服务器上升级某些东西(不确定究竟是什么)。在他这样做之后,问题仍在发生,但似乎不那么频繁了。

最终变得越来越不频繁,现在我还没有看到它在大约5天内发生。所以,我不知道这是来自我的MS技术所做的任何具体事情,或者只是一个更大的问题最终得到解决。但就目前而言,这个问题似乎已经消失了,而不是改变我们的任何事情。

答案 1 :(得分:0)

public static void SendEmail(string sTo, string subject, string body)
{
    var Port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]);
    using (var client = new SmtpClient(Your EmailHost, Port))
    using (var message = new MailMessage()
    {
        From = new MailAddress(FromEmail),
        Subject = subject,
        Body = body
    })
    {
        message.To.Add(sTo);
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["EmailCredential"],
                ConfigurationManager.AppSettings["EmailPassword"]);
        client.EnableSsl = true;
        client.Send(message);
    };
}

答案 2 :(得分:0)

  • 在电子邮件应用程序中正确添加SMTP详细信息之后

    • 您需要转到> Microsoft 365管理中心(https://admin.microsoft.com)>活动用户
    • 选择您要通过SMTP服务器进行身份验证的用户
    • 选择“邮件”标签(请参见图1)
    • 在电子邮件应用程序下,选择>管理电子邮件应用程序
    • 确保已选中“经过身份验证的SMTP”复选框(请参见图2)
    • 然后保存

    之后,您的电子邮件应该可以使用。

此处有图像示例

Image 1

Image 2