加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Office 365上使用默认SMTP凭据的异常 – 客户端未通过身

发布时间:2020-12-15 17:41:51 所属栏目:百科 来源:网络整理
导读:我正在使用NLog以邮件形式发送自定义邮件目标.我正在从我的office365帐户发送我的web.config(我的主要项目)中的默认值,如下所示: system.net mailSettings smtp deliveryMethod="Network" from="myusername@mydomain.com" network defaultCredentials="fals
我正在使用NLog以邮件形式发送自定义邮件目标.我正在从我的office365帐户发送我的web.config(我的主要项目)中的默认值,如下所示:
<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="myusername@mydomain.com">
        <network defaultCredentials="false" host="smtp.office365.com" port="587" userName="myusername@mydomain.com" password="mypassword" enableSsl="true" />
      </smtp>
    </mailSettings>
  </system.net>

我使用我的日志目标(在我的NLog实现包中)覆盖Write方法,如下所示:

protected override void Write(LogEventInfo logEvent) 
    { 
        try
        {
            using (var mail = new MailMessage())
            {
                this.SetupMailMessage(mail,logEvent,this.Layout.Render(logEvent));

                using (SmtpClient smtpClient = new SmtpClient())
                {
                    smtpClient.UseDefaultCredentials = true;
                    smtpClient.Send(mail);
                }
            }
        }
        catch (Exception exception)
        {
            throw new NLogRuntimeException("An error occurred when sending a log mail message.",exception);
        }
    }

当系统尝试从此帐户发送邮件时,将抛出以下System.Net.Mail.SmtpException:

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

我有四倍检查凭据,它们是正确的.有人知道还有什么可能导致这个例外吗?

更新:事实证明,CredentialCache.DefaultCredentials属性是空的字符串.但是,当我使用以下代码手动提取设置时,我可以从web.config获取设置.

SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
smtpClient.Credentials = new NetworkCredential(settings.Network.UserName,settings.Network.Password);
smtpClient.Host = settings.Network.Host;
smtpClient.Port = settings.Network.Port;
smtpClient.EnableSsl = settings.Network.EnableSsl;

var creds = CredentialCache.DefaultCredentials;  // Is empty

我可以使用它作为解决方法.但是给了什么?为什么默认凭据为空?

解决方法

感谢这篇文章,我能够解决我们的问题.我们将邮箱从Rackspace的混合设置迁移到O365.用于发送的邮箱以前不是Exchange帐户,但在迁移后成为一个.
mySmtpClient = New SmtpClient("smtp.office365.com")
mySmtpClient.Port = 587
mySmtpClient.EnableSsl = True
mySmtpClient.Credentials = New System.Net.NetworkCredential("email@domain.com","password","domain.com")
mySmtpClient.Send(Msg)

以前的安装程序不要求我们提供端口或启用ssl,甚至将域放在凭证参数中.希望这可以帮助那些必须使用VB脚本的人通过SMTP与Office 365自动发送电子邮件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读