这两天在给网站弄邮件群发功能,关于实现发邮件就是利用.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时会发送,当然最好设置下发送次数,比方说发送十次不成功就不再发送,然后把邮件从数据库中删除。大量发送本人还没测试,慢慢完善。在这只提供个思路。
posted on 2007-01-12 16:31  Tiu  阅读(751)  评论(0编辑  收藏  举报