关于邮件群发

  • 发表时间:2021-08-22 00:12:26
  • 文章来源:网络

      这两天在给网站弄邮件群发功能,关于实现发邮件就是利用.Net自身提供的System.Web.Mail空间中的一些方法实现,下面先列出仅仅发邮件的代码:

                MailMessage objMessage=new MailMessage();                objMessage.To=”对方邮箱”;                objMessage.From=“邮箱“;                objMessage.Subject=”邮件标题”;//                objMessage.Attachments.Add(new MailAttachment(“”));//发送附件                objMessage.BodyFormat=MailFormat.Html;                objMessage.BodyEncoding=Encoding.GetEncoding(“GB2312“);                objMessage.Body=””邮件内容;//                objMessage.Fields.Add(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate“,1);//                objMessage.Fields.Add(“http://schemas.microsoft.com/cdo/configuration/sendusername“, “username”);//                objMessage.Fields.Add(“http://schemas.microsoft.com/cdo/configuration/sendpassword“, “password”);                SmtpMail.SmtpServer = “192.192.1.53“;                SmtpMail.Send(objMessage);

由于我用的本机的SMTP服务所以不用身份验证,就注释掉了下面的三行。这样就能把邮件发送出去了,然后就考虑群发怎么实现,我参考的是CS里邮件群发的代码。是先把想要发送的所有邮件存储到数据库中,然后让单独的一个线程在后台自己发送,这样就避免的我们等待的过程,我们只需把邮件存到数据库里就显示成功。      我是在Global.asax的Application_Start方法里初始化一个Timer,注意这里的Timer是System.Threading命名空间中的类,使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。此方法不在创建计时器的线程中执行,而是在系统提供的线程池线程中执行。更具体的解释请参照MSDN。然后自己定义一个callback方法调用发送邮件的方法。      其实只要会了发送一封就会群发了,循环就行,由于我是把发送的所有邮件都放到数据库里,所以再循环的时候发送一封就删除一封,失败的保留。当循环一遍后,假若有失败为发送成功的会继续保留在数据库里,在下一次出发Timer时会发送,当然最好设置下发送次数,比方说发送十次不成功就不再发送,然后把邮件从数据库中删除。大量发送本人还没测试,慢慢完善。在这只提供个思路。