概要
子线程工作发送成功邮件做标记逐条提取数据气泡提示信息最小化到托盘实时进度条
代码us ing System;us ing System.Collections;us ing System.Collections.Generic;using System.ComponentModel;using System.Data;us ing System.Data.OleDb;us ing System.Threading;using System.Text;using System.Windows.Forms;us ing System.Net.Mail;us ing System.Net;us ing System.Text.RegularExpress ions;names pace M ailGroup Sends
{public partial class Form1 :Form
{public Form1()
{
Initialize Comp onent();
}private string subject=string.Empty;private string mailto=string.Empty;private string body=string.Empty;private int sucNum=0;private int TotalDate
{get
{if(this.txtDateCount.Text.Trim().Length>0)return Convert.ToInt32(this.txtDateCount.Text.Trim());return 4;
}set { this.txtDateCount.Text=value.ToString(); }
}private string ConnString
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
{get
{string pathFull=
Sys tem.Diagn ostics.Pro ces s.GetCurrentPro ces s().M ainModu le.FileName;string path=pathFull.Substring(0,pathFull.LastIndexOf(@"\"));return@"Provider=Micros oft.Jet.OLEDB.4.0;Data Source="+path+@"\mail.mdb";
}
}private bool mailSent=false; //邮件是否发送成功private int mailTotalCount=0;private int CategoryId=0;private int SentCount=0; //已发送数private int UnitConversion=1; //默认为秒
///<summary>
///发送间隔
///</summary>private int Interval
{get
{int timer=0;int totalMis=(TotalDate*UnitConvers ion* 1000);timer=to talM is / (mailTo talCount-S entCount);return timer;
}
}
///<summary>
///提取邮件
///</summary>private void InitMailList()
{
O leDbConnection Conn=new OleDbConnection(ConnString);try
{string strWhere=CategoryId==1000? "" : "and categoryid="+CategoryId+"orderby isSend,uyx";string sqlStr=@"select top 1 uyxfrom[usermail]where isDelete=0 and IsSend=0"+strWhere;if(Conn.State==ConnectionState.Clos ed)Conn.Open();
OleDb Command cmd=new OleDb Command(s qlStr,Conn);
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
OleDbDataReader reader=cmd.ExecuteReader();mailto=string.Empty;wh ile(re ad er.Re ad())
{mailto+=reader[0].To String()+",";
}reader.Clos e();if(reader!=null)reader.Dispos e();mailto=mailto.Trim(",".ToCharArray());
}catch(Exception ex)
{
Mess ageBox.Show(ex.Mess age,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
}fin a lly
{if(Conn.State==Connection State.Open)Conn.Clo se();if(Conn!=null)Conn.Disp ose();
}
}
///<summary>
///加载邮件列表
///</summary>private void LoadMailList()
{this.dataGridView 1.Co lumn s.Clear();if(this.dataGridView 1.Rows.Count>0)this.dataGridView 1.Rows.Cle ar();dataGridView1.RowHeadersWidth=21;
DataGridViewTextBo xColumn column=new DataGridViewTextBo xColumn();column.ReadOnly=true;column.HeaderText="邮箱列表";column.DisplayIndex=0;column.Name="邮箱列表";column.Width=120;dataGrid View1.Columns.Add(column);column=new DataGridViewTextBo xColumn();column.ReadOnly=true;column.HeaderText="状态";column.DisplayIndex=1;
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
dataGrid View1.Columns.Add(column);
O leDbConnection Conn=new OleDbConnection(ConnString);try
{string strWhere=CategoryId==1000?"" : "and categoryid="+CategoryId+"orderby isSend,uyx";string sql=@"select uyx,Is Send fromusermail where isDelete=0"+strWhere;if(Conn.State==ConnectionState.Clos ed)Conn.Open();
OleDbCommand cmd=new OleDbCommand(s ql,Conn);
OleDbDataReader reader=cmd.ExecuteReader();mai lTo talCo unt=0;wh ile(re ad er.Re ad())
{
DataGridViewRow dgvr=new DataGridViewRow();
DataGridViewTextBo xCell cell=new DataGridViewTextBo xCe ll();cell.Value=reader[0].To String();dgvr.Ce lls.A dd(c e ll);cell=new DataGridViewTextBo xCell();cell.Value="●";c ell.Style.ForeCo lor=Convert.To Int32(reader[1])==0?
Sys tem.Drawin g.Co lo r.Ye l lo w:Sy s t em.Drawin g.Co lo r.Gre en;dgvr.Ce lls.A dd(c e ll);dataGridView 1.Rows.Add(dgvr);ma ilT o t a lCo un t++;
}reader.Clos e();if(reader!=null)reader.Dispos e();this.lb lmai lCount.Text=" "+SentCount+"/"+mailTotalCount+" ";
}catch
{
}fin a lly
{if(Conn.State==Connection State.Open)Conn.Clo se();if(Conn!=null)Conn.Dispose();
}
}
///<summary>
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
///已发送邮件个数
///</summary>private void SentMailCount()
{
O leDbConnection Conn=new OleDbConnection(ConnString);try
{string strWhere=CategoryId==1000? "" : "and categoryid="+CategoryId;string sqlStr=@"select uyxfrom[usermail]where isDelete=0 and IsSend=1 "+strWhere;if(Conn.State==ConnectionState.Clos ed)Conn.Open();
OleDbDataAdapter adapter=new OleDbDataAdapter(sqlStr,Conn);
DataSet ds=new DataSet();a d ap te r.F ill(d s);
SentCount=ds.Tab les[0].Ro ws.Count;
}catch(Exception ex)
{
Mess ageBox.Show(ex.Mess age,"错误",MessageBoxButtons.OK,
MessageBoxIcon.Error);
}fin a lly
{if(Conn.State==Connection State.Open)Conn.Clo se();if(Conn!=null)Conn.Dispose();
}
}
///<summary>
///标记出错的邮箱
///</summary>
///<p aram name="mail"></p aram>private void MarkErrorMail(string mail)
{
O leDbConnection Conn=new OleDbConnection(ConnString);try
{string sql="update usermail set IsDelete=10 where uyx='"+mail+"' ";if(Conn.State==ConnectionState.Clos ed)Conn.Open();
OleDb Command cmd=new OleDbCommand(s ql,Conn);cmd.ExecuteNonQuery();
}catch
{ }
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
{if(Conn.State==Connection State.Open)Conn.Clo se();if(Conn!=null)Conn.Disp ose();
}
}
///<summary>
///修改已发送邮件状态
///</summary>
///<p aram name="mail"></p aram>private void UpdateMailState(string mail, int state)
{
O leDbConnection Conn=new OleDbConnection(ConnString);try
{string where=string.Empty;if(ma il.Length>0)
{
WriteToTxt(DateTime.Now+" Success "+mail, txtLogPath);if(ma il.In d e xO f(",")>-1)'")+"' ";where="and uyx='"+mail+"'";
}e ls e
{where="and IsSend=1";
}string category=CategoryId==1000? "" : "and categoryid="+CategoryId;string sql="update usermail set Is Send="+state+"where IsDelete=0"+category+wh e re;if(Conn.State==ConnectionState.Clos ed)Conn.Open();
OleDb Command cmd=new OleDbCommand(s ql,Conn);cmd.ExecuteNonQuery();
}catch
{ }fin a lly
{if(Conn.State==Connection State.Open)Conn.Clo se();if(Conn!=null)Conn.Disp ose();
}
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
}
///<summary>
///邮件发送
///</summary>
///<p aram n ame="mailTo"></p aram>
///<p aram name="subject"></p aram>
///<p aram name="body"></param>
///<re tu rns></re tu rns>private bool Send(string mailTo, string subject,string body)
{try
{if(!Is Ema il(mailTo))
{
WriteToTxt(DateTime.Now+" Faild "+mailTo, txtLogPath+"Error Message:邮箱格式不正确");
M arkErro rM ail(mai lT o);return fals e;
}if(ma ilTo.Substring(mailTo.Length- 1)=="." | |mai lTo.Substring(mailTo.Length- 1)==",")
{
WriteToTxt(DateTime.Now+" Faild "+mailTo, txtLogPath+"Error Message:邮箱格式不正确");
M arkErro rM ail(mai lT o);return fals e;
}
MailMessage msg=new MailMessage();ms g.From=new MailAddress("***@****","xiaoyaos r",Enco ding.UTF8);if(ma ilT o.In d e xO f(",")>-1)ms g.Bc c.Add(mailTo);e ls ems g.To.A dd(mailTo);msg.Subject=subject;ms g.Body=body;
ArrayList annexList=ReadTxt(txtAnnexPath);for(int i=0; i<annexList.Count; i++)
{msg.Attachments.Add(new Attachment(annexList[i].ToString()));
}
S mtpClient s mtp=new SmtpClient("mail.163.com");
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
s mtp.Credentials=new NetworkCredential("***@****", "*******");smtp.Send(msg);mailSent=true;sucNum++;
}catch(Exception ex)
{if(ex.Mess age.IndexOf("http://www.ipmotor.com/smtp_err.htm")>-1)
{
WriteToTxt(DateTime.Now+" Faild Error Message:"+ex.Message,txtLogPath);this.notifyIcon 1.ShowBallo onTip(Interval, "",ex.Me ssage,Too lTip Icon.None);
System.Threading.Thread.Sleep(Interval*2);base.Dispose(true);
App lication.ExitThread();
Ki llTh re a d();
}
WriteToTxt(DateTime.Now+" Faild "+mailTo+" Error Message:"+ex.Message, txtLogPath);
M ark Erro rM a il(ma ilT o);mailSent=false;
}return mailSent;
}
//*******************************************************************//
//开始发送public void StartMailSend()
{
MailSend mailSend=new MailSend();ma i lS e n d.iT ot a lCount=ma ilT o t a lCo unt;ma i lS e n d.int e rva l=In t e rva l;mailSend.iSentCount=SentCount;mai lSend.onM ailSendProgres s+=new
M ailS end.dM ailS endProgres s(mailS en d_o nM ailS endProgres s);mailSend.Start();
}
//同步更新void mailSend_onMailSendProgress(int total, int current)
{try
作者逍遥散人 Blog:http://xiaoyaosrblog 51cto com
tmhhost为2021年暑假开启了全场大促销,全部都是高端线路的VPS,速度快有保障。美国洛杉矶CN2 GIA+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。本次活动结束于8月31日。官方网站:https://www.tmhhost.com8折优惠码:TMH-SUMMER日本...
Spinservers是Majestic Hosting Solutions,LLC旗下站点,主营美国独立服务器租用和Hybrid Dedicated等,数据中心位于美国德克萨斯州达拉斯和加利福尼亚圣何塞机房。TheServerStore.com,自 1994 年以来,它是一家成熟的企业 IT 设备供应商,专门从事二手服务器和工作站业务,在德克萨斯州拥有 40,000 平方英尺的仓库,库存中始终有...
美国高防服务器提速啦专业提供美国高防服务器,美国高防服务器租用,美国抗攻击服务器,高防御美国服务器租用等。我们的海外高防服务器带给您坚不可摧的DDoS防护,保障您的业务不受攻击影响。HostEase美国高防服务器位于加州和洛杉矶数据中心,均为国内访问速度最快最稳定的美国抗攻击机房,带给您快速的访问体验。我们的高防服务器配有最高层级的DDoS防护系统,每款抗攻击服务器均拥有免费DDoS防护额度,让您...