欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#SMTP发邮件

程序员文章站 2022-05-03 22:14:44
以简报的形式记录C#发送电子邮件(SMTP)的技术要点,以及使用outlook.com提供的SMTP服务器的特殊事项。 ......

这是关于c#发送电子邮件(smtp)的技术笔记,以”简报“形式呈现。

因为最后成功通过outlook.com发送了邮件,所以,我觉得还是有必要 记录一下其中的要点。

一、技术核心

.net framework 提供的两个类:smtpclient和mailaddress

前者负责连接到服务器并且发送邮件,后者构成邮件的内容。

详细请参考:

c#smtp发邮件

 

二、多个接收人

观察网易邮箱,多个接收人使用的是分号(【,】)分割,但是直接传递参数到【mailaddress.to】的【add()】方法却会出现解析异常。

解决方案两个:

微软方面在这个方法的注释上说,多个接收人用逗号分割。

自己拆分成数组,然后循环【add()】

我自己尝试第一个方案的时候,赶上了126邮箱认为我发广告屏蔽了我账号stmp。所以,我后来成功的时候是使用的第二个方案。

C#SMTP发邮件

 

 

三、使用outlook.com提供的smtp

3.1 设置

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

C#SMTP发邮件

 

 

3.2 端口号不是默认的25,而是587

 

没有添加端口的时候,返回的异常提示是:

smtp 服务器要求安全连接或客户端未通过身份验证。 服务器响应为:5.7.57 smtp; client was not authenticated to send anonymous mail during mail from [am0pr02ca0048.eurprd02.prod.outlook.com].

添加了端口之后,仍然没有通过,异常也变了。

smtp 服务器要求安全连接或客户端未通过身份验证。 服务器响应为:5.7.57 smtp; client was not authenticated to send anonymous mail during mail from [am0pr01ca0034.eurprd01.prod.exchangelabs.com]

于是进入下一个环节:

3.3 关于starttls

看到微软outlook强调:

smtp 加密方法 starttls

所以,就怀疑是跟starttls有关。

根据下面这篇文章好像找到了 添加 这个选项的办法:

也就是说这一行:

C#SMTP发邮件

 

 

添加了之后问题仍然存在,并且异常和服务器返回的信息都和以前一样。

后来发现,还需要开启ssl

.enablessl = true;

上面的链接里面已经是这么用的,但是当时我没看到,在搜到了这个问题的时候才注意到。

https://q.cnblogs.com/q/83815/

 

另外,测试的时候,usedefaultcredentials选项开启和关闭都能发送成功。

 

完。