博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
阅读量:7030 次
发布时间:2019-06-28

本文共 5940 字,大约阅读时间需要 19 分钟。

net2.0后,C#可以利用System.Net发送邮件了。

代码整理如下:

 3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递

1 /**************************************   2 * 
3 * Copyright(c)2014 LeeStudio All rights reserved. 4 * CLR版本:4.0.30319.17929 5 * 开发团队:欺心伴月个人工作室 6 * 技术博客:http://www.cnblogs.com/lichunyang/ 7 * 所属工程:LeeStudio.Basic 8 * 创 建 者:Frank Lee 9 * 修改时间:2014-02-20 11:20 10 *
11 **************************************/ 12 13 using System; 14 using System.Text; 15 using System.Net; 16 using System.Net.Mail; 17 using System.Net.Mime; 18 19 namespace LeeStudio.Basic 20 { 21 /// 22 /// 邮件发送类 23 /// 24 public class SendEmail 25 { 26 private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类 27 28 #region 构造函数 29 /// 30 /// 构造函数 31 /// 32 /// 收件人地址(多个以,号分开) 33 /// 发件人地址 34 /// 主题 35 /// 正文 36 public SendEmail(string toAddresses, string fromAddress, string title, string body) 37 : this(toAddresses, fromAddress, "", "", title, body, false) 38 { 39 } 40 41 /// 42 /// 构造函数 43 /// 44 /// 收件人地址 45 /// 发件人地址 46 /// 收件人名字 47 /// 发件人姓名 48 /// 主题 49 /// 正文 50 /// 正文是否为html格式 51 public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml) 52 { 53 mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936)); 54 if (toName.Equals("")) 55 mailMessage.To.Add(toAddress); 56 else 57 mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); 58 59 mailMessage.Subject = title; 60 mailMessage.SubjectEncoding = Encoding.GetEncoding(936); 61 62 mailMessage.Body = body; 63 mailMessage.IsBodyHtml = isBodyHtml; 64 mailMessage.BodyEncoding = Encoding.GetEncoding(936); 65 } 66 #endregion 67 68 /// 69 /// 设置SMTP,并且将邮件发送出去 70 /// 所有参数都设置完成后再调用该方法 71 /// 72 /// 发件人密码 73 /// SMTP服务器地址 74 public void SetSmtp(string password, string smtpHost) 75 { 76 SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal); 77 } 78 79 /// 80 /// 设置SMTP,并且将邮件发送出去 81 /// 所有参数都设置完成后再调用该方法 82 /// 83 /// 发件人地址(必须为真实有效的email地址) 84 /// 发件人密码 85 /// SMTP服务器地址 86 /// SMTP服务器的端口 87 /// SMTP服务器是否启用SSL加密 88 /// 邮件的优先级 89 public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) 90 { 91 SmtpClient smtp = new SmtpClient(); 92 smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 93 smtp.Credentials = new NetworkCredential(address, password); 94 smtp.Host = smtpHost; 95 smtp.Port = smtpPort; 96 smtp.EnableSsl = isEnableSsl; 97 98 mailMessage.Priority = priority; 99 smtp.Send(mailMessage); //发送邮件 100 }101 102 #region //设置邮件地址 103 /// 104 /// 设置更多收件人 105 /// 106 /// 收件人地址 107 public void SetMoreToAddress(string toAddresses)108 {109 mailMessage.To.Add(toAddresses);110 }111 112 /// 113 /// 设置更多收件人 114 /// 115 /// 收件人地址 116 /// 收件人名字 117 public void SetMoreToAddress(string toAddress, string toName)118 {119 mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));120 }121 122 /// 123 /// 设置抄送者(多个以,号分开) 124 /// 125 /// 抄送者地址 126 public void SetCarbonCopyFor(string ccAddresses)127 {128 mailMessage.CC.Add(ccAddresses);129 }130 131 /// 132 /// 设置抄送者 133 /// 134 /// 抄送者地址 135 /// 抄送者名字 136 public void SetCarbonCopyFor(string ccAddress, string ccName)137 {138 mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));139 }140 141 /// 142 /// 设置密送者(多个以,号分开) 143 /// 144 /// 密送者 145 public void SetBlindCarbonCopyFor(string bccAddresses)146 {147 mailMessage.Bcc.Add(bccAddresses);148 }149 150 /// 151 /// 设置密送者 152 /// 153 /// 密送者 154 /// 密送者名字 155 public void SetBlindCarbonCopyFor(string bccAddress, string bccName)156 {157 mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));158 }159 #endregion160 161 #region 添加附件 162 /// 163 /// 添加附件(自动识别文件类型) 164 /// 165 /// 单个文件的路径 166 public void Attachments(string fileName)167 {168 mailMessage.Attachments.Add(new Attachment(fileName));169 }170 171 /// 172 /// 添加附件(默认为富文本RTF格式) 173 /// 174 /// 单个文件的路径 175 public void AttachmentsForRTF(string fileName)176 {177 mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf));178 }179 #endregion180 }181 }

 

调用是按照需求,自由设置参数。

1 using LeeStudio.Basic; 2  3 private void SendEmail() 4 { 5 #region 最简设置  6 //SendEmail se = new SendEmail("*****@****.com", "****@163.com", "title", "body");  7 //se.SetSmtp("password", "smtp.163.com"); //必须在所有参数设置完后调用此方法  8 #endregion 9 10 #region 完全设置 11 //string toAddresses = "***@**.**,***@**.**"; 12 //string toNames = "frank,lee";13 14 //SendEmail se = new SendEmail("to@**.**", "from@**.**", "toname", "fromname","title", "body", false); 15 //se.SetMoreToAddress("to@**.**", "toName"); 16 //se.SetCarbonCopyFor("cc@**.**"); 17 //se.SetBlindCarbonCopyFor("bcc@**.**");18 19 //string filePath = Request.PhysicalApplicationPath + "/file/SendEmail.txt"; 20 //se.Attachments(filePath); 21 //filePath = Request.PhysicalApplicationPath + "/file/RTF文件.docx"; 22 //se.AttachmentsForRTF(filePath); 23 //se.SetSmtp("email", "password", "smtp", 25, true, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 24 #endregion25 }

 

遗留问题:

当有多个收件人/抄送者/密送者时,如何快速处理?之前的做法是让用户输入字符串,再将字符串一一对应匹配,代码如下:

1 ///    2 /// 将邮件地址和名称加入到锯齿数组中   3 ///    4 /// 邮件地址(多个以,号分开)   5 /// 名称(多个以,号分开)   6 /// 
地址和名称数组
7 private string[][] SetNameList(string addrs, string names) 8 { 9 string[][] result = new string[2][];10 11 string[] addr = addrs.Split(',');12 string[] name = names.Split(',');13 result[0] = new string[addr.Length];14 result[1] = new string[name.Length];15 16 for (int i = 0; i < addr.Length; i++)17 result[0][i] = addr[i];18 for (int i = 0; i < name.Length; i++)19 result[1][i] = name[i];20 21 return result;22 }

 

首先这个方法就很奇葩,其次,只要用户输入的个数不对应,又要做一堆的异常处理。

转载于:https://www.cnblogs.com/jjg0519/p/6079885.html

你可能感兴趣的文章
Android PackageManagerService详细分析
查看>>
Ubuntu_12.04 server amd64安装读取数据失败以及samba的配置
查看>>
读懂Oracle 10053事件
查看>>
android SD卡路径问题以及如何获取SDCard 内存
查看>>
我的友情链接
查看>>
原型模式与对象的拷贝
查看>>
一元二次方程的求解
查看>>
国外那些优秀的 Drupal 教程博客
查看>>
JavaScript强化教程——AngularJS 指令
查看>>
ubuntu登陆界面只有guest session的解决方法
查看>>
MongoDB分页以及复杂条件查询例子
查看>>
log4j.properties配置详解与实例
查看>>
「RAAS」又什么?气隙技术的发明加密货币安全
查看>>
第三关练习题 权限
查看>>
IOS开发--循环引用问题,普通控件为什么用weak,代理为什么用weak,block内用到外面的东...
查看>>
Java初学者怎么学习才能快速入门?
查看>>
AJPFX对选择和冒泡两种排序的理解
查看>>
磁盘管理之MBR
查看>>
Linux系统管理(一)
查看>>
鼠标悬停整行变色
查看>>