当前位置: 首页 > 知识库问答 >
问题:

尝试通过Office 365发送电子邮件时出现SMTP 5.7.57错误

楚宏胜
2023-03-14

我正在尝试设置一些代码以通过Office 365经过身份验证的SMTP服务发送电子邮件:

var _mailServer = new SmtpClient();
_mailServer.UseDefaultCredentials = false;
_mailServer.Credentials = new NetworkCredential("test.user@mydomain.com", "password");
_mailServer.Host = "smtp.office365.com";
_mailServer.TargetName = "STARTTLS/smtp.office365.com"; // same behaviour if this lien is removed
_mailServer.Port = 587;
_mailServer.EnableSsl = true;

var eml = new MailMessage();
eml.Sender = new MailAddress("test.user@mydomain.com");
eml.From = eml.Sender;
eml.to = new MailAddress("test.recipient@anotherdomain.com");
eml.Subject = "Test message";
eml.Body = "Test message body";

_mailServer.Send(eml);

这似乎不起作用,我看到了一个例外:

SMTP服务器需要安全连接,或者客户端没有经过身份验证。服务器响应是:5 . 7 . 57 SMTP;客户端未通过身份验证,无法在系统中从< br >发送匿名邮件。net . mail . mail command . send(SmtpConnection conn,Byte[] command,String from)
at System。net . mail . smtptransport . sendmail(邮件地址发件人,邮件地址集合收件人,字符串deliveryNotify,SmtpFailedRecipientException

我已经尝试启用网络跟踪,并且似乎建立了安全的通信(例如,我在日志中看到一行“STARTTLS”命令,后来在日志中还有一行“远程证书被用户验证为有效”,以下< code>Send()和< code>Receive()数据不能以纯文本形式读取,并且似乎不包含任何TLS/SSH混乱)

我可以使用相同的电子邮件地址和密码登录http://portal.office.com/并使用Outlook电子邮件web邮件发送和读取电子邮件,那么在以编程方式发送电子邮件时,什么可能导致身份验证失败?

有没有办法另外调试加密流?

共有3个答案

石俊雄
2023-03-14

确保您使用的是帐户的实际office365电子邮件地址。你可以通过点击Outlook365中的配置文件按钮找到它。我一直在努力进行身份验证,直到我意识到我试图用于身份验证的电子邮件地址不是实际的邮箱电子邮件帐户。实际账户电子邮件的形式可以是:account@company.onmicrosoft.com.

长孙鸿
2023-03-14

为了帮助调试,请尝试暂时切换到 MailKit 并使用如下所示的代码片段:

using System;

using MailKit.Net.Smtp;
using MailKit.Security;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            var message = new MimeMessage ();
            message.From.Add (new MailboxAddress ("", "test.user@mydomain.com"));
            message.To.Add (new MailboxAddress ("", "test.recipient@anotherdomain.com"));
            message.Subject = "Test message";

            message.Body = new TextPart ("plain") { Text = "This is the message body." };

            using (var client = new SmtpClient (new ProtocolLogger ("smtp.log"))) {
                client.Connect ("smtp.office365.com", 587, SecureSocketOptions.StartTls);

                client.Authenticate ("test.user@mydomain.com", "password");

                client.Send (message);
                client.Disconnect (true);
            }
        }
    }
}

这将把整个事务记录到一个名为“smtp.log”的文件中,然后您可以通读该文件,看看哪里出了问题。

请注意,smtp.log可能包含一个< code>AUTH LOGIN命令,后跟一些base64编码的命令(这些是您的用户/通行证),因此如果您共享日志,请确保删除这些行。

我想这和你在系统中看到的错误是一样的。Net.Mail,但是它将帮助您了解正在发生的事情。

假设它失败了(我希望它会失败),尝试更改为 SecureSocketOptions.None 和/或尝试注释掉 Authenticate()。

看看这如何改变您看到的错误。

闽康安
2023-03-14

就我而言,在我尝试了所有这些建议但没有运气后,我联系了Microsoft支持,他们的建议是简单地更改密码。

这修复了我的问题。

请注意,密码没有过期,因为我成功登录了office365,但是重置解决了问题。

经验教训:不要相信Office 365密码的过期日期,在我的情况下,密码会在1-2个月后过期,但它不起作用。这导致我在我的代码中进行调查,只是在很长时间后,我才意识到问题出在Office365密码“损坏”或“过早过期”上。

不要忘记每3个月“刷新”一次密码。

 类似资料:
  • 我通过SMTP服务发送电子邮件时收到以下错误消息: 我的系统上有以下SMTP设置: 操作系统:Windows 7家庭高级版 IIS:IIS 7 如何解决这个问题? 谢谢。

  • 我发现这篇文章使用亚马逊SES与Rails ActionMailer,并遵循https://github.com/abronte/Amazon-SES-Mailer上找到的示例,但我在发送邮件时出现此错误 配置/环境/development.rb: 发送消息: 为什么我在这里有SSL错误?我尝试了另一种配置,使用smtp和个人gmail帐户,它可以发送电子邮件。这是SES的问题吗?我该如何解决这个

  • 我正在尝试通过smtp发送邮件,但它显示错误消息。我正在使用主机号578.after执行程序,它显示无法将套接字转换为TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPath

  • 我有以下代码: 我无法连接到gmail,连接出现错误,但是所有连接信息都是正确的,不知道是什么阻止了我发送电子邮件的代码中的连接,我无法发送简单的电子邮件,我一点也不知道它是什么。 感谢您的帮助

  • 问题内容: 我正在使用。 使用发送电子邮件(通过)的最佳方法是什么? 问题答案: 有关使用Outlook的解决方案,请参见下面的TheoretiCAL答案。 否则,请使用python随附的smtplib。请注意,这将要求您的电子邮件帐户允许smtp,默认情况下不一定启用此功能。 编辑: 此示例使用保留域,如RFC2606中所述 为了使它真正与gmail配合使用,Doe先生需要进入gmail中的选项

  • 我使用的PHPMailer表格在这里找到。 从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。 在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码: 任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!