【问题标题】:SMTP mail send with ASP.Net [duplicate]使用 ASP.Net 发送 SMTP 邮件 [重复]
【发布时间】:2018-05-02 12:57:47
【问题描述】:

我想弄清楚为什么我不能使用 office365 帐户发送带有附件的简单邮件,如果我的代码有问题或帐户配置丢失,我不知道,请代码帮助:

代码是:

protected void sentmail(string sb)
{ 
    using (var msg = new MailMessage())
    {
        msg.To.Add(new MailAddress("myaccount@company.cl));
        msg.From = new MailAddress("botmail@company.cl");
        msg.ReplyToList.Add("botmail@company.cl");
        msg.Subject = "Test Mail";
        msg.Body = sb.ToString();
        msg.IsBodyHtml = true;

        var client = new SmtpClient
        {
            Host = "smtp.office365.com", //it worked on testmail
            Credentials = new System.Net.NetworkCredential("botmail@company.cl, "password"),
            Port = 25,
            EnableSsl = true
        };
        client.Send(msg);

    }
}

发送错误是:

5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [SC1PR80CA0082.lamprd80.prod.outlook.com]

【问题讨论】:

  • office365 邮件 = 一个巨大的雷电...我也遇到过类似的问题,让我挖掘一下我的代码
  • 我刚刚编辑了!请帮忙!
  • 你的错误处理不好。不要编写函数来返回object。您应该让异常冒泡到可以处理的地方,而不是在功能上传递它们。删除那些 try/catch 块,并且不要让您的方法返回布尔值。只要它是void。如果它没有抛出异常,则可以假设它已成功完成。

标签: c# asp.net smtp office365 port


【解决方案1】:

这是我为您发送的生产代码

using (var msg = new MailMessage())
        {
            msg.To.Add(new MailAddress(userName));
            msg.From = new MailAddress(userName);
            msg.ReplyToList.Add(model.EmailAddress);
            msg.Subject = "Message from the Web";
            msg.Body = sb.ToString();
            msg.IsBodyHtml = true;

            var client = new SmtpClient
            {
                Host = "xxxmydomainxxx-co-uk.mail.protection.outlook.com",
                Credentials = new System.Net.NetworkCredential(userName, password),
                Port = 25,
                EnableSsl = true
            };

            // You can use Port 25 if 587 is blocked 
            try
            {
                client.Send(msg);
                return true;
            }
            catch (SmtpException smtpEx)
            {
                return smtpEx;
            }
            catch (Exception ex)
            {
                return ex;
            }
        }

【讨论】:

  • 你必须将它添加到我假设的 void 函数中? msg.ReplyToList.Add(model.EmailAddress); //这条线是干什么用的?
  • 回复列表是为了让收件人可以回复发送电子邮件的人。因此,如果您使用 Web 表单,并发送给主机\网站所有者,它将通过 office 365 帐户发送,如果您想回复,而不是必须从电子邮件中复制和粘贴电子邮件地址,您可以直接回复
  • 您也可以将其作为 void 或作为对象的一部分。我把它作为一个静态对象,这样我就可以在发送时返回 true,或者将 smtp 异常或一般异常返回给我的调用对象,以便在出现任何问题时对其进行相应的错误处理
  • 我在编辑时使用了您的代码,因为问题似乎是代码本身,我应该将其标记为答案吗?还是非常感谢!
  • 端口解封后试了code,还是发不了邮件
【解决方案2】:

不用附件也能用?

尝试在凭据中添加主机:

credentials = new System.Net.NetworkCredential(MAIL_CREDENTIALS_EMAIL, PASS_CREDENTIALS_EMAIL, HOST_EMAIL);

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2013-09-19
    • 2016-08-30
    • 1970-01-01
    • 2011-08-18
    • 2017-01-20
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多