邮件群发器

公司受金融危机影响,业务量大减,公司销售人员一天到晚在网上找客户名录发邮件,这天公司领导一拍脑袋“开发一个邮件群发器,销售人员提供客户通迅录,程序自动发送”,再而拍拍我肩膀"开发这个邮件群发器任务就交给你去处理了",虽然有三年多时间没有再做过WinForm,但也没办法只好硬着头皮拍拍胸脯"没问题"。

马上登录园子"WinForm 邮件"搜索,真庆辛结果还不少。照着大牛们的文章,很快就可以接发邮件了,看来园子不愧我们程序员的百科全书。

不过期间还是碰到了一些小问题,比如qq邮箱始终通不过身份验证(到现在也没解决,最后放弃了QQ邮箱),还在多线程进度显示的问题(最后也是在园子里找到解决思路),在此贴部份代码,以备忘。


  1#region 发送邮件
  2        private void SendEmail()
  3        {
  4            try
  5            {
  6                MethodInvoker mi = new MethodInvoker(this.ShowProcessBar);
  7                this.BeginInvoke(mi);
  8                MailMessage mail = new MailMessage();
  9                mail.From = new MailAddress(txtAccount.Text + cmbServer.Text);
 10                mail.Subject = txtSubject.Text;
 11                mail.SubjectEncoding = System.Text.Encoding.UTF8;
 12                mail.IsBodyHtml = isHTML.Checked;
 13                mail.BodyEncoding = System.Text.Encoding.UTF8;
 14                mail.Priority = MailPriority.High;
 15                mail.ReplyTo = mail.From;
 16                if (lstAttachFile.Items.Count>0)
 17                {               
 18                    Attachment atta = null;
 19                    foreach (object li in lstAttachFile.Items)
 20                    {
 21                        string fn = li.ToString();
 22                        if (System.IO.File.Exists(fn))
 23                        {                            
 24                            atta = new Attachment(fn);
 25                            ContentDisposition dispotion = atta.ContentDisposition;
 26                            dispotion.CreationDate = File.GetCreationTime(fn);
 27                            dispotion.ModificationDate = File.GetLastWriteTime(fn);
 28                            dispotion.ReadDate = File.GetLastAccessTime(fn);
 29                            mail.Attachments.Add(atta);
 30                        }

 31                    }

 32                }

 33                SmtpClient client = GetSmtpClien(cmbServer.Text);
 34                int index = 1;
 35                foreach (Contract item in lstContract)
 36                {
 37                    mail.To.Clear();
 38                    mail.To.Add(new MailAddress(item.MailAddress));
 39                    StringBuilder sbHTML = new StringBuilder();
 40                    if (isHTML.Checked)
 41                    {
 42                        
 43                        sbHTML.Append("<h4>" + item.CompanyName + "</h4>");
 44                        sbHTML.Append("<h4>" + item.Name + ":</h4>");
 45                        sbHTML.Append("<p>" + currentBodyHtml + "</p>");
 46                        sbHTML.Append("<hr/>");
 47                        sbHTML.Append("<p>" + txtSin.Text + "</p>");
 48                        
 49                    }

 50                    else
 51                    {
 52                        sbHTML.Append(item.CompanyName + " ");
 53                        sbHTML.Append(item.Name + ": ");
 54                        sbHTML.Append(currentBodyHtml + " ");                        
 55                        sbHTML.Append(txtSin.Text); 
 56                    }

 57                    mail.Body = sbHTML.ToString();
 58                    client.Send(mail);
 59                    if (IncreaseEvent != null)
 60                    {
 61                        IncreaseEvent(index);
 62                    }

 63                    index++;
 64                }

 65                //mail.
 66                //object stateMsg = mail;
 67                MessageBox.Show(this"发送完毕!""提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 68                MethodInvoker mi2 = new MethodInvoker(this.HideProccessBar);
 69                this.BeginInvoke(mi2);
 70            }

 71            catch (Exception ex)
 72            {
 73                MessageBox.Show(this, ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 74                MethodInvoker mi3 = new MethodInvoker(this.HideProccessBar);
 75                this.BeginInvoke(mi3);
 76            }

 77        }

 78        #endregion

 79
 80        #region 获取SmptClient
 81        private SmtpClient GetSmtpClien(string serverType)
 82        {
 83            SmtpClient client = new SmtpClient("");
 84            switch (serverType)
 85            {
 86                case "@163.com":
 87                    client.Host = "smtp.163.com";
 88                    client.UseDefaultCredentials = false;
 89                    client.EnableSsl = false;
 90                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
 91                    client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);
 92                    break;
 93                case "@qq.com":
 94                    client.Host = "smtp.qq.com";
 95                    client.UseDefaultCredentials = true;
 96                    client.EnableSsl = false;
 97                    client.Port = 25;
 98                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
 99                    client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);
100                    break;
101                case "@gmail.com":
102                    client.Host = "smtp.gmail.com";
103                    //client.UseDefaultCredentials = false;
104                    client.EnableSsl = true;
105                    client.Port = 587;
106                    //client.DeliveryMethod = SmtpDeliveryMethod.Network;
107                    client.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text);
108                    break;
109                case "@winccess.com":
110                    client.Host = "mail.winccess.com";
111                    //client.UseDefaultCredentials = false;
112                    client.EnableSsl = false;
113                    //client.Port = 25;
114                    //client.DeliveryMethod = SmtpDeliveryMethod.Network;
115                    client.Credentials = new System.Net.NetworkCredential(txtAccount.Text + serverType, txtPassword.Text);
116                    break;
117                default:
118                    break;
119            }
            
120            return client;
121        }

122        #endregion
原文地址:https://www.cnblogs.com/soundcode/p/3661860.html