ASP.NET发送电子邮件

题记:最近闲来无聊,突然想到还没有实现过发送电子邮件的Demo,说干就干,马上找了点资料实现了一下。

原理:发件人会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到三方经营商的Smtp服务器上,三方经营商的Smtp服务器会根据收件人的邮箱账号,把邮件通过Smtp协议发给三方邮箱的Smtp服务器。

原理图:

实现主要代码如下:

 1         /// <summary>
 2         /// 发送邮件
 3         /// </summary>
 4         /// <param name="subject">主题</param>
 5         /// <param name="body">内容</param>
 6         /// <param name="to">收件人</param>
 7         /// <param name="files">附件</param>
 8         /// <param name="isBodyHtml">是否html</param>
 9         public static void SendMail(String subject, String body, String to, List<FileInfo> files = null, bool isBodyHtml = false)
10         {
11             string? host = "smtp.qq.com"; // 各大运营商的Smtp服务器,此处为QQ邮箱的实例,后面将列出目前市面上常用运营商的Smtp服务器名称
12             int port = -1;// 各大运营商的Smtp服务器的端口
13             string? userName = "********";// 邮箱账号
14             string? password = "**********"; // 邮箱开启POP3/SMTP服务后 给予的授权码。
15             string? senderAddress = "********@qq.com";
16             SmtpClient mailClient = null;
17             try
18             {
19                 if (port != null && port > 0)
20                 {
21                     mailClient = new SmtpClient(host, (int)port);
22                 }
23                 else
24                 {
25                     mailClient = new SmtpClient(host);
26                 }
27                 //SMTP服务器身份验证
28                 mailClient.Credentials = new NetworkCredential(userName, password);
29                 //发件人地址、收件人地址
30                 MailMessage message = new MailMessage(senderAddress, to);
31                 //邮件主题
32                 message.Subject = subject;
33                 //邮件内容
34                 message.Body = body;
35                 //是否html格式
36                 if (isBodyHtml)
37                 {
38                     message.IsBodyHtml = true;
39                 }
40                 if(files != null)
41                 {
42                     foreach (var file in files)
43                     {
44                         //附件
45                         Attachment att = new Attachment(file.FullName);
46 
47                         //添加附件
48                         message.Attachments.Add(att);
49                     }
50                 }
51                 //发送
52                 mailClient.Send(message);
53             }
54             catch (Exception ex)
55             {
56                 throw ex;
57             }
58         }

所使用的类介绍:

smtpClient类:允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。

MailAddress类:MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。  

MailMessage 类:MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。MailMessage 类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用 MailMessage类的关联属性。 

NetworkCredential类:为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。

国内免费邮箱的SMTP地址:

1、Gmail邮箱:smtp.gmail.com
2、网易邮箱:(分为三中)
    ①POP3服务器: pop.yeah.net
    ②SMTP服务器: smtp.yeah.net
    ③IMAP服务器: imap.yeah.net
3、QQ邮箱:smtp.qq.com
4、搜狐邮箱:smtp.sohu.com
5、新浪邮箱:smtp.sina.com
6、AOL邮箱:smtp.aol.com
7、GMX邮箱: smtp.gmx.com
8、139邮箱:smtp.139.com
9、微软邮箱:smtp.live.com
10、21cn邮箱:smtp.21cn.com
11、Tom邮箱:smtp.tom.com

常见错误警示:

1、mail from address must be same as authorization user(命令顺序错误。服务器响应为:错误:首先需要EHLO和AUTH!

原因:所使用的运营商未开启POP3/SMTP服务

解决方案:去运行时服务中开启即可,开启后记住授权码。

posted @ 2023-02-04 22:41  苏瑾~  阅读(110)  评论(0编辑  收藏  举报