[c#] 邮件群发工具的编写(三)邮件发送的几种方式

上一篇,邮件群发工具的编写(二)数据的保存,我们讲到了邮箱数据的保存。

 

这一篇,我们讲一下邮件群发的中心大事之发送。

首先,我们还是先介绍一下通过程序发送邮件的几种方式。

1.Smtp方式.

这种方式比较傻瓜化,在C#里调用起来也相对简单(其他语言像java也有类似的Pocket(包)可以直接调用,相当简单)。通常在.net里,存在两个线程的类可以使用:

一个是System.Net.Mail,另一个就是Sytem.Web.Mail,当然还有没有其他类我也没去细究过了。然而后面那个类现在VS里已经提示说过时了,那就用前面的那个类吧。

调用方法如下,先添加对System.Net.Mail的引用。代码如下:

View Code
 1 /// <summary>
 2    /// 作者:凌晨的搜索者
 3    /// 网址:http://www.cnblogs.com/uu102
 4    /// </summary>
 5     public class MailSender
 6    {
 7        public SmtpClient Client { get; set; }
 8        public MailMessage Msg { get; set; }
 9        private string[] To { get; set; }
10        private string SmtpServer { get; set; }
11        private int Port { get; set; }
12        public MailSender()
13        {
14            
15        }
16 
17        public MailSender(string from, string smtpServer, string username, string password)
18        {
19            this.Init(from, smtpServer,username,password);
20        }
21        private void Init(string from, string smtpServer,string username,string password)
22        {
23            this.Msg = new MailMessage();
24            this.Client = new SmtpClient(smtpServer);
25            this.SmtpServer = smtpServer;//发送邮箱的Smtp服务器地址
26            this.Client.UseDefaultCredentials = true;
27            this.Client.Credentials = new NetworkCredential(username, password);//这里是必须填写的邮箱登录用户名和密码
28            this.Msg.From = new MailAddress(from);//设置邮件发送地址
29            this.Msg.IsBodyHtml = true;//这里最好设置为html格式的邮件正文
30             this.Msg.BodyEncoding = Encoding.UTF8;//邮件正文编码
31            this.Msg.SubjectEncoding = Encoding.UTF8;
32            this.Msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;//当邮件发送失败的时候通知一下
33            
34        }
35        public void Send(string subject,string body,string[] attachmentPaths)
36        {
37 
38            
39            for (int i = 0; i < attachmentPaths.Length; i++)
40            {
41                this.Msg.Attachments.Add(new Attachment(attachmentPaths[i]));
42            }
43            this.Msg.Subject = subject;
44            this.Msg.Body = body;
45             this.Client.Send(this.Msg);
46             
47        }
48    }

 

这个发送邮件的封装类没有起到封装的作用,还等待各位去补充完善,代码很简单,调用的话,请接着看下面的代码
View Code
 1  /// <summary>
 2         /// copyright:No
 3         /// author:凌晨的搜索者
 4         /// site:http://www.cnblogs.com/uu102
 5         /// </summary>
 6         /// <param name="sender"></param>
 7         /// <param name="e"></param>
 8         private void button3_Click(object sender, EventArgs e)
 9         {
10            try
11              {
12                 MailSender mailSender = new MailSender("wxp146@qq.com", "smtp.qq.com", "wxp146", "******");//Rember that it's your password
13                 links = new Dictionary<string, LinkMan>();
14                 for (int i = 0; i < listView1.CheckedItems.Count; i++)
15                 {
16                     ListViewItem listViewItem = listView1.Items[listView1.CheckedItems[i].Index];
17                     LinkMan linkMan = new LinkMan();
18                     string id = listViewItem.Text;
19                     string nick = listViewItem.SubItems[1].Text;
20                     string email = listViewItem.SubItems[2].Text;
21                     string area = listViewItem.SubItems[3].Text;
22                     linkMan.Nick = nick;
23                     linkMan.Email = email;
24                     linkMan.Area = area;
25                     mailSender.Msg.To.Add(linkMan.Email);
26 
27 
28                     links.Add(linkMan.Email, linkMan);
29 
30                 }
31                
32                 /*
33                  * mailSender.Msg.Subject = "这是一封测试信,可以直接放垃圾箱!";
34                 mailSender.Msg.Body = "你好:测定试一下,打扰之处请见谅!<a href=\"HTTP://www.uu102.com\">曙光营销技术论坛</a>";
35                 mailSender.Client.Send(mailSender.Msg);
36                  *
37                  */
38                 mailSender.Send("这是一封测试信,可以直接放垃圾箱!",
39                                  "你好:测定试一下,打扰之处请见谅!<a href=\"HTTP://www.uu102.com\">曙光营销技术论坛</a>",
40                                  new string[] { Environment.CurrentDirectory + "\\Config\\MailInfo.xml" });
41                 MessageBox.Show("邮件发送成功");
42              }
43             catch (WebException e1)
44             {
45                 MessageBox.Show(string.Format("邮件发送失败,请检查设置{0}",e1.Message));
46             } 
47         }

 

至于上面的代码突然出现的button3是一个点击发送的按钮。以上就是我们要介绍的第一种邮件发送方式

2.模拟登陆邮箱管理页面,然后模拟发送。

典型的做法有登录QQ邮箱然后发帖的,网上很多人都在研究这种方式。当然,由于时间和精力的关系,我就没直接贴出代码了,有兴趣的朋友可以联系本人,一起交流探讨一下。

3.利用IIS的Smtp邮箱服务发送

这种方法大概是最麻烦的了,要求在自己的机器上装这装那,还不一定会成功。当然,如果你有个人的网站服务器的话,这个也不失为一个办法。

 

当然还有很多别的或这改良的方法,比如ssl安全加密发送,Socket发送(这种方法以后有时间再不上吧)。

以上就是邮件群发的基本因素,如果要做到群发,当然做这一些还不够,要考虑的因素还很多,还望大家自己完善了。

下一篇,我们就来讲讲群发之后的“邮件跟踪服务”,这是一个目前很多人都关心的问题,邮件发送过程就说到这了。教程每天更新,欢迎继续关注!

posted on 2012-09-02 19:24  凌晨的搜索者  阅读(2507)  评论(2编辑  收藏  举报

导航