zoukankan      html  css  js  c++  java
  • 线程池发送邮件的方法(向多个用户发送同一邮件)

    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         }
  • 相关阅读:
    IO 模型
    进程、线程、锁
    用多线程,实现并发,TCP
    同步锁(互斥锁),GIL锁(解释器层面的锁),死锁与递归锁
    Java项目中的常用的异常2
    JAVA项目中的常用的异常处理情况1
    添加学生信息web界面连接数据库
    jdbc下载路径
    添加学生信息 web界面 并且连接数据库
    正则表达式
  • 原文地址:https://www.cnblogs.com/ElvisZhongShao/p/4463107.html
Copyright © 2011-2022 走看看