线程池发送邮件的方法(向多个用户发送同一邮件)

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         }

 

posted @ 2015-04-28 15:19  shzhq  阅读(701)  评论(0编辑  收藏  举报