基于c#发送Outlook邮件(仅SMTP版本)

摘要:
varmessage=newMailMessage{From=newMailAddress(“***发送邮箱帐户***”),IsBodyHtml=false};但是,始终在开头报告上述错误(原因是必须在绑定帐户密码之前设置UseDefaultCredentials=false)stringsmtpServer=“smtp.office365。com”;

先表明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-9c414e2aa040

POP 访问是被默认禁用的。 若要启用 POP 访问,请参阅在 Outlook.com 中启用 POP 访问。

IMAP 服务器名称outlook.office365.com

IMAP 端口 993

IMAP 加密方法TLS

POP 服务器名称outlook.office365.com

POP 端口 995

POP 加密方法 TLS

SMTP 服务器名称smtp.office365.com

SMTP 端口 587

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

  • 对应的阿里云方案链接:https://help.aliyun.com/knowledge_detail/37532.html?spm=5176.13394938.0.0.79dc2e17bQeEkN 它那个txt值包含中文符号,有点问题

免责声明:文章转载自《基于c#发送Outlook邮件(仅SMTP版本)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基类子类在Qt信号量机制下的思考EC中的QEvent下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

memset函数使用

函数原型 void *memset(void *s,int c,size_t n); 功能 将已开辟内存空间 s 的首 n 个字节的值设为值 c。 头文件  #include<memory.h>  1. memset是以字节为单位,初始化内存块。 当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如, c...

PHP中define和defined的区别

PHP中define和defined的区别   对于初学者会混淆这两个函数1.define用来定义一个常量,常量也是全局范围的。不用管作用域就可以在脚本的任何地方访问常量。一个常量一旦被定义,就不能再改变或者取消定义如:  define("path","mlx1036@163.com")  define为常mlx1036@163.com为常量的值     2...

haproxy实现会话保持(2):stick table

HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 在上一篇文章中,分析了haproxy如何通过cookie实现会话保持,本文讨论haproxy另一种实现会话保持的方式:stick table。 1.stickiness和stick table简介 stick table是hap...

比特币交易(Transaction)的输入与输出

比特币通过“挖矿”机制保证了不能任意造币。通过分布式网络和HashCash机制解决双重支付问题。事实上比特币系统中不存在独立的电子货币,而只存在交易单(账单),货币值是依附于交易单存在的,所以比特币中的电子货币实质上交易的账单记录的变化,确切的说是货币交易(Transactions)的 数字签名链,它的数字签名算法使用的是ECDSA(椭圆曲线数字签名算法...

vue $forceUpdate()强制刷新

改变列表的值 一直不渲染 <van-pull-refresh v-model="refreshing" @refresh="onRefresh"> <van-list v-model="loading" :finish...

mysql 总结二(自定义函数)

本质:mysql内置函数的一种扩展,本质上与mysql内置函数一样。 函数必要条件:     @1:参数(非必备);     @2:返回值; 模板:   create  function  function_name   returns     {string|integer|real|decimal}   routine_body(函数体) 关于函数体:...