概要
子线程工作发送成功邮件做标记逐条提取数据气泡提示信息最小化到托盘实时进度条
代码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
官方网站:点击访问青果云官方网站活动方案:—————————–活动规则—————————1、选购活动产品并下单(先不要支付)2、联系我司在线客服修改价格或领取赠送时间3、确认价格已按活动政策修改正确后,支付订单,到此产品开设成功4、本活动产品可以升级,升级所需费用按产品原价计算若发生退款,按资源实际使用情况折算为产品原价再退还剩余余额! 美国洛杉矶CN2_GIACPU内存系统盘流量宽带i...
DiyVM 香港沙田机房,也是采用的CN2优化线路,目前也有入手且在使用中,我个人感觉如果中文业务需要用到的话虽然日本机房也是CN2,但是线路的稳定性不如香港机房,所以我们在这篇文章中亲测看看香港机房,然后对比之前看到的日本机房。香港机房的配置信息。CPU内存 硬盘带宽IP价格购买地址2核2G50G2M1¥50/月选择方案4核4G60G3M1¥100/月选择方案4核8G70G3M4¥200/月选择...
近日CloudCone发布了最新的补货消息,针对此前新年闪购年付便宜VPS云服务器计划方案进行了少量补货,KVM虚拟架构,美国洛杉矶CN2 GT线路,1Gbps带宽,最低3TB流量,仅需14美元/年,有需要国外便宜美国洛杉矶VPS云服务器的朋友可以尝试一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器...