📄 mutimailhandle.cs
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Threading;
using System.Net.Mail;
using jmail;
/// <summary>
/// 多线程邮件群发
/// </summary>
public class MutiMailHandle
{
private ArrayList _almail =new ArrayList();//待发送邮件列表
private ArrayList _alerr = new ArrayList(); //错误邮件列表
private DataTable _dtSender = new DataTable();//发送的邮箱列表
private DataTable _dtmail = new DataTable();//发送的邮件内容
private int _interval = 300;//发送间隔
private int _number = 10;//一次发送数量
private string _sender = "";
private string _title = "";
private string _body = "";
private string _pwd = "";
private string _smtp = "";
private int _threadNum = 1; //线程数量
private int _cursor = 0;//待发邮件当前位置
Thread[] thread; //线程数组
public MutiMailHandle()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// 发送邮件
/// </summary>
public void Send()
{
if (_dtSender.Rows.Count > 0&&_almail.Count>0&&_dtmail.Rows.Count>0) //发送人 邮件地址 邮件内容
{
_threadNum = _dtSender.Rows.Count;//根据发送的邮箱数来顶线程的个数。
_title=_dtmail.Rows[0]["title"].ToString();
_body = _dtmail.Rows[0]["content"].ToString();
thread = new Thread[_threadNum];
for (int i = 0; i < _threadNum; i++) //实例化线称
{
_sender = _dtSender.Rows[i]["email"].ToString();
_pwd = _dtSender.Rows[i]["password"].ToString();
_smtp = _dtSender.Rows[i]["smtp"].ToString();
thread[i] = new Thread(new ThreadStart(sendMail));
thread[i].Start();
Thread.Sleep(500);//等待线程启动
}
waitFinsh();//等待线程结束
}
}
#region 内部方法
private void waitFinsh()
{
for (int i = 0; i < _threadNum; i++) //实例化线称
{
if (thread[i].IsAlive)
{
Thread.Sleep(500);
i--;
}
}
}
private void sendMail()
{
string sender = _sender;
string pwd = _pwd;
string smtpserver = _smtp;
MessageClass mail = new MessageClass();
mail.Logging = true;
mail.ISOEncodeHeaders = true;
mail.HTMLBody = "AAAAA";
mail.Subject = _title;
mail.From = sender.Trim();
mail.MailServerUserName = sender.Trim();
mail.MailServerPassWord = pwd.Trim();
mail.Charset = "GB2312";
mail.ContentType = "text/html";
mail.Priority = 1;
ArrayList mac = getMailList();
int n = mac.Count;
//发送邮件
while (n>0) //还有需要发送的邮件
{
mail.Recipients.Clear(); //清除目前邮箱
for(int i=0; i<mac.Count; i++)
{
mail.AddRecipient(mac[i].ToString().Trim(),"","");
}
try
{
mail.Send(smtpserver.Trim(), false);
Thread.Sleep(_interval);//间隔一端时间
}
catch (Exception ex)
{
logErr("发送失败! 详情:" + ex.Message);
}
mac = getMailList(); //获取邮件列表
n = mac.Count;
}
mail.Clear();
mail.Close();
}
/// <summary>
/// 获取邮件列表
/// </summary>
/// <returns></returns>
private ArrayList getMailList()
{
int n = _almail.Count;//邮件总数
if (n > (_cursor + _number)) n = _cursor + _number;
ArrayList mac = new ArrayList();
lock (this)
{
for (; _cursor < n; _cursor++)
{
try
{
mac.Add(_almail[_cursor].ToString());
}
catch{} //忽略错误
}
}
return mac;
}
private void logErr(string msg)
{
lock (this)
{
_alerr.Add(msg);
}
}
#endregion
#region "公共属性"
/// <summary>
/// 获取错误列表
/// </summary>
public ArrayList GetErr
{
get
{
return _alerr;
}
}
/// <summary>
/// 接收送邮件列表
/// </summary>
public ArrayList MailList
{
get
{
return _almail;
}
set
{
_almail = value;
}
}
/// <summary>
/// 发送邮件
/// </summary>
public DataTable SenderList
{
get
{
return _dtSender;
}
set
{
_dtSender = value;
}
}
/// <summary>
/// 发送的邮件内容
/// </summary>
public DataTable Mail
{
get
{
return _dtmail;
}
set
{
_dtmail = value;
}
}
/// <summary>
/// 发送间隔时间秒
/// </summary>
public int Interval
{
get
{
return _interval;
}
set
{
_interval = value;
}
}
/// <summary>
/// 每次发送的数量
/// </summary>
public int Number
{
get
{
return _number;
}
set
{
_number = value;
}
}
#endregion
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -