用户登录  |  用户注册
首 页源码下载网络学院最新源码源码排行屏蔽广告
当前位置:新兴网络 > 网络学院 > .Net技术 > Asp.Net

.Net 邮件批量发送函数

减小字体 增大字体 作者:xingshao  来源:本站整理  发布时间:2010-08-15 17:13:00

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

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

C# code复制代码
/// <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了。简单又实用,真是居家必备。

Tags:Mail C# 批量发送 邮件

作者:xingshao
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

网络学院评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论