邮件群发器
公司受金融危机影响,业务量大减,公司销售人员一天到晚在网上找客户名录发邮件,这天公司领导一拍脑袋“开发一个邮件群发器,销售人员提供客户通迅录,程序自动发送”,再而拍拍我肩膀"开发这个邮件群发器任务就交给你去处理了",虽然有三年多时间没有再做过WinForm,但也没办法只好硬着头皮拍拍胸脯"没问题"。
马上登录园子"WinForm 邮件"搜索,真庆辛结果还不少。照着大牛们的文章,很快就可以接发邮件了,看来园子不愧我们程序员的百科全书。
不过期间还是碰到了一些小问题,比如qq邮箱始终通不过身份验证(到现在也没解决,最后放弃了QQ邮箱),还在多线程进度显示的问题(最后也是在园子里找到解决思路),在此贴部份代码,以备忘。
1
#region 发送邮件2
private void SendEmail()3
{4
try5
{6
MethodInvoker mi = new MethodInvoker(this.ShowProcessBar);7
this.BeginInvoke(mi);8
MailMessage mail = new MailMessage();9
mail.From = new MailAddress(txtAccount.Text + cmbServer.Text);10
mail.Subject = txtSubject.Text;11
mail.SubjectEncoding = System.Text.Encoding.UTF8;12
mail.IsBodyHtml = isHTML.Checked;13
mail.BodyEncoding = System.Text.Encoding.UTF8;14
mail.Priority = MailPriority.High;15
mail.ReplyTo = mail.From;16
if (lstAttachFile.Items.Count>0)17
{ 18
Attachment atta = null;19
foreach (object li in lstAttachFile.Items)20
{21
string fn = li.ToString();22
if (System.IO.File.Exists(fn))23
{ 24
atta = new Attachment(fn);25
ContentDisposition dispotion = atta.ContentDisposition;26
dispotion.CreationDate = File.GetCreationTime(fn);27
dispotion.ModificationDate = File.GetLastWriteTime(fn);28
dispotion.ReadDate = File.GetLastAccessTime(fn);29
mail.Attachments.Add(atta);30
}31
}32
}33
SmtpClient client = GetSmtpClien(cmbServer.Text);34
int index = 1;35
foreach (Contract item in lstContract)36
{37
mail.To.Clear();38
mail.To.Add(new MailAddress(item.MailAddress));39
StringBuilder sbHTML = new StringBuilder();40
if (isHTML.Checked)41
{42
43
sbHTML.Append("<h4>" + item.CompanyName + "</h4>");44
sbHTML.Append("<h4>" + item.Name + ":</h4>");45
sbHTML.Append("<p>" + currentBodyHtml + "</p>");46
sbHTML.Append("<hr/>");47
sbHTML.Append("<p>" + txtSin.Text + "</p>");48
49
}50
else51
{52
sbHTML.Append(item.CompanyName + "\r\n");53
sbHTML.Append(item.Name + ":\r\n");54
sbHTML.Append(currentBodyHtml + "\r\n"); 55
sbHTML.Append(txtSin.Text); 56
}57
mail.Body = sbHTML.ToString();58
client.Send(mail);59
if (IncreaseEvent != null)60
{61
IncreaseEvent(index);62
}63
index++;64
}65
//mail.66
//object stateMsg = mail;67
MessageBox.Show(this, "发送完毕!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);68
MethodInvoker mi2 = new MethodInvoker(this.HideProccessBar);69
this.BeginInvoke(mi2);70
}71
catch (Exception ex)72
{73
MessageBox.Show(this, ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);74
MethodInvoker mi3 = new MethodInvoker(this.HideProccessBar);75
this.BeginInvoke(mi3);76
}77
}78
#endregion79

80
#region 获取SmptClient81
private SmtpClient GetSmtpClien(string serverType)82
{83
SmtpClient client = new SmtpClient("");84
switch (serverType)85
{86
case "@163.com":87
client.Host = "smtp.163.com";88
client.UseDefaultCredentials = false;89
client.EnableSsl = false;90
client.DeliveryMethod = SmtpDeliveryMethod.Network;91
client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);92
break;93
case "@qq.com":94
client.Host = "smtp.qq.com";95
client.UseDefaultCredentials = true;96
client.EnableSsl = false;97
client.Port = 25;98
client.DeliveryMethod = SmtpDeliveryMethod.Network;99
client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);100
break;101
case "@gmail.com":102
client.Host = "smtp.gmail.com";103
//client.UseDefaultCredentials = false;104
client.EnableSsl = true;105
client.Port = 587;106
//client.DeliveryMethod = SmtpDeliveryMethod.Network;107
client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);108
break;109
case "@winccess.com":110
client.Host = "mail.winccess.com";111
//client.UseDefaultCredentials = false;112
client.EnableSsl = false;113
//client.Port = 25;114
//client.DeliveryMethod = SmtpDeliveryMethod.Network;115
client.Credentials = new System.Net.NetworkCredential(txtAccount.Text + serverType, txtPassword.Text);116
break;117
default:118
break;119
} 120
return client;121
}122
#endregion

浙公网安备 33010602011771号