1、前台代码
1 <asp:Button runat="server" ID="btn_SendMail" Text="发送邮件" OnClick="btn_SendMail_Click" />
2、后台发送邮件的一个实体类
1 //邮件发送参数的实体类 2 public class MailsSendClass 3 { 4 public string EmailHost { get; set; }//邮箱SMTP 事务的主机的名称或 IP 地址 5 public string EmailFrom { get; set; }//发件人邮箱 6 public string EmailPwd { get; set; }//发件人邮箱密码 7 public string EmailTitle { get; set; }//邮件主题 8 public string EmailBody { get; set; }//邮件正文 9 10 //public string EmailTo { get; set; }//收件人邮箱会单独写,因为收件人是一个集合 11 }
3、发送邮件的方法
1 /// <summary> 2 /// 发送邮件方法 3 /// </summary> 4 /// <param name="msc">邮箱实体类</param> 5 /// <param name="recipient">收件人集合</param> 6 private static void SendEmail(MailsSendClass msc,string recipient) 7 { 8 System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(); 9 client.Host = msc.EmailHost; 10 client.UseDefaultCredentials = false; 11 client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; 12 client.Credentials = new System.Net.NetworkCredential(msc.EmailFrom, msc.EmailPwd); 13 System.Net.Mail.MailMessage Message = new System.Net.Mail.MailMessage(); 14 Message.From = new System.Net.Mail.MailAddress(msc.EmailFrom, "測試人員"); 15 Message.To.Add(recipient); 16 Message.Subject =msc.EmailTitle; 17 Message.Body =msc.EmailBody; 18 Message.SubjectEncoding = System.Text.Encoding.UTF8; 19 Message.BodyEncoding = System.Text.Encoding.UTF8; 20 Message.Priority = System.Net.Mail.MailPriority.High; 21 Message.IsBodyHtml = true; 22 client.Send(Message); 23 }
4、线程池发送邮件的方法
1 /// <summary> 2 /// 线程池发送邮件 3 /// </summary> 4 /// <param name="msc">邮箱实体类</param> 5 /// <param name="recipients">收件人集合</param> 6 /// <returns></returns> 7 private static bool SendEmailsUsingThreadPool(MailsSendClass msc, List<string> recipients) 8 { 9 try 10 { 11 //线程数 12 var coreCount = Environment.ProcessorCount; 13 //邮件数 14 var itemCount = recipients.Count; 15 //每个线程执行记录数 16 var batchSize = itemCount / coreCount; 17 var pending = coreCount; 18 using (var mre = new ManualResetEvent(false)) 19 { 20 for (int batchCount = 0; batchCount < coreCount; batchCount++) 21 { 22 var lower = batchCount * batchSize; 23 var upper = (batchCount == coreCount - 1) ? itemCount : lower + batchSize; 24 ThreadPool.QueueUserWorkItem(st => 25 { 26 for (int i = lower; i < upper; i++) 27 SendEmail(msc,recipients[i]); 28 if (Interlocked.Decrement(ref pending) == 0) 29 mre.Set(); 30 }); 31 } 32 mre.WaitOne(); 33 } 34 return true; 35 } 36 catch (Exception exc) 37 { 38 return false; 39 } 40 }
5、点击按钮,发送邮件
1 protected void btn_SendMail_Click(object sender, EventArgs e) 2 { 3 MailsSendClass msc = new MailsSendClass(); 4 msc.EmailHost = "smtp.qq.com"; 5 msc.EmailFrom = "2535745217@qq.com"; 6 msc.EmailPwd = "szq7952036"; 7 msc.EmailTitle = "主题"; 8 msc.EmailBody = "内容"; 9 string Shoujr = "3230863302@qq.com;473983390@qq.com;1574875692@qq.com;2963513639@qq.com;"; 10 string recipient1 = Shoujr.Trim().TrimEnd(';');//去掉最后一个 ';' 11 string[] Emaillist = recipient1.Split(';'); 12 List<string> lists = new List<string>(Emaillist); 13 if (SendEmailsUsingThreadPool(msc,lists)) 14 { 15 Response.Write("<script>alert('发送成功')</script>"); 16 } 17 else 18 { 19 Response.Write("<script>alert('发送失败')</script>"); 20 } 21 }