您的位置:首页 > 编程语言

邮件群发系统实例-代码解析

2011-01-14 16:46 826 查看
概要:
子线程工作,发送成功邮件做标记,逐条提取数据,气泡提示信息,最小化到托盘,实时进度条

代码:
[align=left]using System.Collections;[/align]
[align=left]using System.Collections.Generic;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Data.OleDb;[/align]
[align=left]using System.Threading;[/align]
[align=left]using System.Text;[/align]
[align=left]using System.Windows.Forms;[/align]
[align=left]using System.Net.Mail;[/align]
[align=left]using System.Net;[/align]
[align=left]using System.Text.RegularExpressions;[/align]
[align=left] [/align]
[align=left]namespace MailGroupSends[/align]
[align=left]{[/align]
[align=left] public partial class Form1 : Form[/align]
[align=left] {[/align]
private string subject = string.Empty, mailto = string.Empty, body = string.Empty;
private int sucNum = 0;
private int TotalDate=0;
private string ConnString
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
string pathFull = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
string path = pathFull.Substring(0, pathFull.LastIndexOf(@"\"));
return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + @"\mail.mdb";
[align=left] }[/align]
[align=left] }[/align]
private bool mailSent = false; //邮件是否发送成功
private int mailTotalCount = 0;
private int CategoryId = 0;
private int SentCount = 0; //已发送数
private int UnitConversion = 1; //默认为秒
[align=left] [/align]
[align=left] /// 发送间隔[/align]
private int Interval
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
int timer = 0;
int totalMis = (TotalDate * UnitConversion * 1000);
timer = totalMis / (mailTotalCount-SentCount);
return timer;
[align=left] }[/align]
[align=left] }[/align]
private void Form1_Load(object sender, EventArgs e)
[align=left] {[/align]
Control.CheckForIllegalCrossThreadCalls = false;
[align=left] InitMailCategory();[/align]
[align=left] SentMailCount();[/align]
[align=left] LoadMailList();[/align]
[align=left] ClearTxt(txtAnnexPath);[/align]
[align=left] InitTime();[/align]
[align=left] }[/align]
[align=left]/// 发送[/align]
private void btnSendMail_Click(object sender, EventArgs e)
[align=left] {[/align]
[align=left] TotalDate = Convert.ToInt32(this.txtDateCount.Text.Trim());[/align]
[align=left] ControlEnabled(false);[/align]
[align=left] subject = this.txtSubject.Text.Trim();[/align]
[align=left] body = this.rtxtBody.Text.Trim();[/align]
this.progressBar1.Visible = true;
this.lblProgress.Visible = true;
[align=left] //用子线程工作[/align]
[align=left] new Thread(new ThreadStart(StartMailSend)).Start();[/align]
[align=left] }[/align]
[align=left]/// 邮件发送[/align]
private bool Send(string mailTo, string subject, string body)
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
if (!IsEmail(mailTo)) //邮箱格式验证
[align=left] {[/align]
WriteToTxt(DateTime.Now + " Faild " + mailTo, txtLogPath + " Error Message:邮箱格式不正确");
[align=left] MarkErrorMail(mailTo);[/align]
return false;
[align=left] }[/align]
MailMessage msg = new MailMessage();
msg.From = new MailAddress("***@****", "xiaoyaosr", Encoding.UTF8);
if (mailTo.IndexOf(",") > -1)
[align=left] msg.Bcc.Add(mailTo);[/align]
[align=left] else[/align]
[align=left] msg.To.Add(mailTo);[/align]
[align=left] msg.Subject = subject;[/align]
[align=left] msg.Body = body;[/align]
[align=left] [/align]
ArrayList annexList = ReadTxt(txtAnnexPath);
for (int i = 0; i < annexList.Count; i++)
[align=left] {[/align]
[align=left] msg.Attachments.Add(new Attachment(annexList[i].ToString()));[/align]
[align=left] }[/align]
[align=left] [/align]
SmtpClient smtp = new SmtpClient("mail.163.com");
[align=left] smtp.Credentials = new NetworkCredential("***@****", "*******");[/align]
[align=left] smtp.Send(msg);[/align]
[align=left] mailSent = true;[/align]
[align=left] sucNum++;[/align]
[align=left] }[/align]
catch (Exception ex)
[align=left] {[/align]
WriteToTxt(DateTime.Now + " Faild Error Message:" + ex.Message, txtLogPath);
this.notifyIcon1.ShowBalloonTip(Interval, "", ex.Message, ToolTipIcon.None);
[align=left] System.Threading.Thread.Sleep(Interval * 2);[/align]
[align=left] KillThread();[/align]
[align=left] MarkErrorMail(mailTo);[/align]
[align=left] mailSent = false;[/align]
[align=left] }[/align]
return mailSent;
[align=left] }[/align]
[align=left] [/align]
[align=left]//开始发送[/align]
[align=left] public void StartMailSend()[/align]
[align=left] {[/align]
MailSend mailSend = new MailSend();
mailSend.iTotalCount = mailTotalCount;
[align=left] mailSend.interval = Interval;[/align]
[align=left] mailSend.iSentCount = SentCount;[/align]
[align=left] mailSend.onMailSendProgress += new MailSend.dMailSendProgress(mailSend_onMailSendProgress);[/align]
[align=left] mailSend.Start();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //同步更新[/align]
void mailSend_onMailSendProgress(int total, int current)
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
if (this.InvokeRequired)
[align=left] {[/align]
this.Invoke(new MailSend.dMailSendProgress(mailSend_onMailSendProgress), new object[] { total, current });
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] InitMailList();[/align]
string percent = (((current + 1) *100) / mailTotalCount).ToString() + "%";
string progress = percent + " " + (current + 1) + "/" + mailTotalCount;
this.lableTimer.Text = progress;
[align=left] this.notifyIcon1.ShowBalloonTip(Interval,"", progress,ToolTipIcon.None);//气泡提示[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: