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服务
解决方案:去运行时服务中开启即可,开启后记住授权码。