代码改变世界

asp.net 开发 跬步篇〔3〕.net 邮件批量发送

2010-02-25 17:21  邢少  阅读(...)  评论(...编辑  收藏

     最近的一个项目中,有一个批量发送工资条的功能,貌似很神秘,其实很简单。以前就知道.net中各有一个专门实现Email发送的命名空间,刚好这次可以实践一下。在这又得赞美一下.net,哈哈真是太会办事了,简单实现。

     废话不在多说,直接切入主题吧。功能的需求是每个月在生成工资报表后触发操作,可以批量发送到地址薄中的各个员工的邮箱中。所以我就写了一个发送邮件的class、使用跟的时候直接用就可以了。发送邮件的命名空间是System.Net.Mail,使用也很简单〔代码见下〕

 

/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailHs">邮件集合hs[key:邮箱地址#收信人名称[代码]; value:邮箱内容]</param>
/// <param name="smtpAuthUsername">发件人邮箱</param>
/// <param name="smtpAuthPassword">邮箱密码</param>
public void Send(Hashtable mailHs, string smtpAuthUsername, string smtpAuthPassword, string smtpServer, string titel, string subject)
{
string meg = string.Empty;


//定义传输协议
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(smtpServer);
//设置认证发件人
smtp.Credentials = new System.Net.NetworkCredential(smtpAuthUsername, smtpAuthPassword);

//异步发送完成获取发送状态
//smtp.SendCompleted += new System.Net.Mail.SendCompletedEventHandler(SendCompletedCallback);
System.Net.Mail.MailMessage mail;

foreach (string var in mailHs.Keys)
{
string[] list = var.Split('#');
try
{
mail
= new System.Net.Mail.MailMessage();
mail.From
= new System.Net.Mail.MailAddress(smtpAuthUsername, titel);
//回复人,回复人名
mail.ReplyTo = new System.Net.Mail.MailAddress(smtpAuthUsername, titel);
//收件人
mail.To.Add(list[0]);
//邮件优先级
mail.Priority = System.Net.Mail.MailPriority.Normal;
//设置html邮件
mail.IsBodyHtml = true;
//标题
mail.Subject = subject;
//内容
mail.Body = mailHs[var].ToString();

smtp.Send(mail);
//;, list[1]);
meg = string.Format("{0} {1}邮件发送成功。", System.DateTime.Now.ToString(), list[1]);
WriteLog(meg);
}
catch
{
meg
= string.Format("{0} {1}邮件发送失败。", System.DateTime.Now.ToString(), list[1]);

WriteLog(meg);
}
}
}

 

 

      代码中,我用的是邮件的同步发送、还有一种异步发送,但是两种方式都有自己的应用场景。因为我的功能需求是批量发送工资条,邮箱中的每个人的信息是不同的。所以用同步发送,用hashtable 存储了地址和内容,然后一个循环,发送完成。如果使用跟的批量是一封邮件批量发送多多人,那么就可以用异步发送,这样的话性能上会有所提高,并且避免大数据量下死掉。异步的时候记得用这个回调:

smtp.SendCompleted += new System.Net.Mail.SendCompletedEventHandler(SendCompletedCallback); 

这样可以在这个方法中写一些后续的处理,比如发送结果的反馈。我的功能实现中是在一个log.txt文件中写入日志文件。这样在发送完成后,可以查看发送的结果。同步就不说了直接在完成后,写一个方法就ok了。简单又实用,真是居家必备。

  分享了!欢迎交流!知识虽小,重在积累。