概要
子线程工作发送成功邮件做标记逐条提取数据气泡提示信息最小化到托盘实时进度条
代码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
如今我们还有在做个人网站吗?随着自媒体和短视频的发展和兴起,包括我们很多WEB2.0产品的延续,当然也包括个人建站市场的低迷和用户关注的不同,有些个人已经不在做网站。但是,由于我们有些朋友出于网站的爱好或者说是有些项目还是基于PC端网站的,还是有网友抱有信心的,比如我们看到有一些老牌个人网站依旧在运行,且还有新网站的出现。今天在这篇文章中谈谈有网友问关于个人网站备案的问题。这个也是前几天有他在选择...
photonvps怎么样?photonvps现在针对旗下美国vps推出半价促销优惠活动,2.5美元/月起,免费10Gbps DDoS防御,Linux系统,机房可选美国洛杉矶、达拉斯、芝加哥、阿什本。以前觉得老牌商家PhotonVPS贵的朋友可以先入手一个月PhotonVPS美国Linux VPS试试了。PhotonVPS允许合法大人内容,支持支付宝、paypal和信用卡,30天退款保证。Photo...
Hostodo发布了几款采用NVMe磁盘的促销套餐,从512MB内存起,最低年付14.99美元,基于KVM架构,开设在拉斯维加斯机房。这是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,产品性能一般,数据中心目前在拉斯维加斯和迈阿密,支持使用PayPal或者支付宝等付款方式。下面列出几款NVMe硬盘套餐配置信息。CPU:1core内存:512MB...