zoukankan      html  css  js  c++  java
  • asp.net 开发 跬步篇〔3〕.net 邮件批量发送

         最近的一个项目中,有一个批量发送工资条的功能,貌似很神秘,其实很简单。以前就知道.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了。简单又实用,真是居家必备。

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

    作者:邢少
    关于作者:从业至今一直从事软件前沿的分析设计工作,对软件开发过程、项目管理有浓厚的兴趣。如有想法、建议,请多多赐教
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过 xingshaoxian@163.com 与我联系,非常感谢。
  • 相关阅读:
    webform--常用的控件
    .net嵌入c#代码(投票练习)
    webform之session传值(临时数据的存储)与扩展属性 --(购物车练习)
    ASP.NET aspx页面中 写C#脚本; ASP.NET 指令(<%@%>);
    LinQ操作
    什么是C# Lambda表达式?形如:p=>p.abc
    winform基础
    3D计算机图形学读书笔记—Wat版本
    计算机图形学的领域与分类
    NetBeans中文乱码解决办法
  • 原文地址:https://www.cnblogs.com/xingshao/p/1673677.html
Copyright © 2011-2022 走看看