先代表Outlook的参数:网址:https://support.office.com/zh-cn/article/Outlook-com-%E7%9A%84-POP%E3%80%81IMAP-%E5%92%8C-SMTP-%E8%AE%BE%E7%BD%AE-d088b986-291d-42b8-9564-9c414e2aa040html
POP 访问是被默认禁用的。 若要启用 POP 访问,请参阅在 Outlook.com 中启用 POP 访问。c#
IMAP 服务器名称outlook.office365.com服务器
IMAP 端口 993测试
IMAP 加密方法TLSui
POP 服务器名称outlook.office365.com阿里云
POP 端口 995加密
POP 加密方法 TLSspa
SMTP 服务器名称smtp.office365.com.net
SMTP 端口 587code
SMTP 加密方法 STARTTLS
安装nuget包:由于使用的core项目,因此引用了ReturnTrue.AspNetCore.Net.SmtpClient包(SmtpClient)。
官方指定代码:
Yes, I am using SMTP client submission. This is the c# code: var smtpClient = new SmtpClient() { Host = "smtp.office365.com", Port = 587, UseDefaultCredentials = false, EnableSsl = true }; smtpClient.Credentials = new NetworkCredential("*** 发送邮箱帐号 ***", "密码"); var message = new MailMessage { From = new MailAddress("*** 发送邮箱帐号 ***"), Sender = new MailAddress("*** 接收邮箱帐号 ***"), Subject = "Test mail", IsBodyHtml = false }; message.To.Add("*** 接收邮箱帐号 ***"); message.Body = "This is a test mail. "; smtpClient.Send(message);
上述代码运行无误,由于一开始没有找到该代码,致使写的代码出现如下异常:
Message=The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [HK0P153CA0010.APCP153.PROD.OUTLOOK.COM]
源代码:这是我以前写的代码,其实是同样的,可是一开始一直报上述错误(缘由就是在绑定帐号密码前要设置UseDefaultCredentials = false)
string smtpServer = "smtp.office365.com"; int smtpPort = 587; string mailFrom = "xxx@outlook.com"; string passWord = "xxxxxx"; string mailTo = "xxxx@qq.com"; SmtpClient smtpClient = new SmtpClient(smtpServer, smtpPort); smtpClient.UseDefaultCredentials = false;//写到这里不报错 smtpClient.Credentials = new NetworkCredential(mailFrom, passWord); smtpClient.EnableSsl = true; //smtpClient.UseDefaultCredentials = false;//写到这里会报错,必须在帐号密码绑定前写。 MailAddress mailAddressFrom = new MailAddress(mailFrom); MailAddress mailAddressTo = new MailAddress(mailTo, "xx的QQ邮箱"); MailMessage mailMessage = new MailMessage(mailAddressFrom, mailAddressTo); mailMessage.Subject = "用c#测试发送邮件"; mailMessage.Body = "这是一次测试发送,发送人用的outlook邮箱"; mailMessage.BodyEncoding = Encoding.UTF8; smtpClient.Send(mailMessage);
代码很短,单想到实例化对象的顺序还会产生这样的结果,之后要注意了。
后续事项:域名未设置 SPF 解析记录
SPF 记录是一种域名服务(DNS)记录,用于标识哪些邮件服务器能够表明您的域名发送电子邮件。 SPF 记录的目的是为了防止垃圾邮件发送者在您的域名上,使用伪造的发件人地址发送邮件。
若您未对您的域名添加 SPF 解析记录,则黑客能够仿冒以该域名为后缀的邮箱,来发送垃圾邮件。
在您的 DNS 服务提供商处,为您的域名添加一条 TXT 记录:
将主机字段(Host)设置为您子域名的名称。(例如,若是您的电子邮件地址是contact@mail.example.com
,则为 mail
。)若是不使用子域名,则将其设为@
。
用您的 SPF 记录填写 TXT 值字段。例如 v=spf1 a mx include:secureserver.net ~all