概要
子线程工作发送成功邮件做标记逐条提取数据气泡提示信息最小化到托盘实时进度条
代码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
想必我们有一些朋友应该陆续收到国内和国外的域名注册商关于域名即将涨价的信息。大概的意思是说从9月1日开始,.COM域名会涨价一点点,大约需要单个9.99美元左右一个。其实对于大部分用户来说也没多大的影响,毕竟如今什么都涨价,域名涨一点点也不要紧。如果是域名较多的话,确实增加续费成本和注册成本。今天整理看到Dynadot有发布新的八月份域名优惠活动,.COM首年注册依然是仅需48元,本次优惠活动截止...
有在六月份的时候也有分享过新网域名注册商发布的域名促销活动(这里)。这不在九月份发布秋季域名促销活动,有提供年付16元的.COM域名,同时还有5个+的特殊后缀的域名是免费的。对于新网服务商是曾经非常老牌的域名注册商,早年也是有在他们家注册域名的。我们可以看到,如果有针对新用户的可以领到16元的.COM域名。包括还有首年免费的.XYZ、.SHOP、Space等等后缀的域名。除了.COM域名之外的其他...
阿里云(aliyun)在这个月又推出了一个金秋上云季活动,到9月30日前,每天两场秒杀活动,包括轻量应用服务器、云服务器、云数据库、短信包、存储包、CDN流量包等等产品,其中Aliyun轻量云服务器最低60元/年起,还可以99元续费3次!活动针对新用户和没有购买过他们的产品的老用户均可参与,每人限购1件。关于阿里云不用多说了,国内首屈一指的云服务器商家,无论建站还是学习都是相当靠谱的。活动地址:h...