zoukankan      html  css  js  c++  java
  • 使用Net Mail发送邮件

    最近用到了发送邮件这个功能,简单记录一下案例。代码如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Configuration;
      6 using System.Net.Mail;
      7 using HtmlAgilityPack;
      8 using System.IO;
      9 using System.Transactions;
     10 using System.Text.RegularExpressions;
     11 using NLog;
     12 using System.Web;
     13 using System.Data;
     15 using System.Net;
     16 using System.Net.Mime;
     17 
     18 namespace Services
     19 {
     20     public class SendEmailService
     21     {
     22         public static string FROM => ConfigurationManager.AppSettings["SenderEmailAddress"];
     23         public static string FROM_DISPLAY_NAME => ConfigurationManager.AppSettings["SenderName"];
     24         public static String USERNAME => ConfigurationManager.AppSettings["SenderUserName"];
     25         public static String PASSWORD => ConfigurationManager.AppSettings["SenderPwd"];
     26         public static String HOST => ConfigurationManager.AppSettings["Host"];
     27         public static int PORT => int.Parse(ConfigurationManager.AppSettings["ServerPort"]);
     28         public static int TIMEOUT => int.Parse(ConfigurationManager.AppSettings["TimeOut"]);
     29         public static Boolean ENABLESSL => Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSSL"]);
     30         public static String SUBACCOUNT => ConfigurationManager.AppSettings["SubAccount"];
     31 
     32         private static Logger logger = LogManager.GetCurrentClassLogger();
     33 
     34         public const string EmptyString = "";
     35 
     36         public static string Send(List<string> toList, List<string> ccList, List<string> bccList, string subject, string body, List<string> attachments, Stream stream = null, string fileName = "")
     37         {
     38 
     39             string msg = string.Empty;
     40             int emailTriggerStatus = int.Parse(ConfigurationManager.AppSettings["Email_TriggerStatus"]);
     41             List<string> validEmailList = new List<string>();
     42             List<string> validEmailCcList = new List<string>();
     43             List<string> validEmailBccList = new List<string>();
     44             try
     45             {
     46                 MailMessage mailMsg = new MailMessage();
     47                 IEnumerable<string> finalToRecipients = null;
     48                 IEnumerable<string> finalCcRecipients = null;
     49                 IEnumerable<string> finalBccRecipients = null;
     50                 if (emailTriggerStatus == Globals.EMAIL_NOT_SEND)
     51                 {
     52                     logger.Info(Globals.EMAIL_LOGGER);
     53                 }
     54                 else
     55                 {
     56                     foreach (string email in toList)
     57                     {
     58                         if (UtilityService.IsValidEmail(email))
     59                         {
     60                             validEmailList.Add(email);
     61                         }
     62                     }
     63 
     64                     finalToRecipients = validEmailList.Distinct();
     65                     if (!ccList.IsNullOrEmpty())
     66                     {
     67                         foreach (string email in ccList)
     68                         {
     69                             if (UtilityService.IsValidEmail(email))
     70                             {
     71                                 validEmailCcList.Add(email);
     72                             }
     73                         }
     74                     }
     75 
     76                     // both Emailto and EmailCC null , not send email
     77                     if (!(validEmailList.IsNullOrEmpty()))
     78                     {
     79                         if (!validEmailCcList.IsNullOrEmpty())
     80                         {
     81                             finalCcRecipients = validEmailCcList.Where(m => !finalToRecipients.Contains(m)).Distinct();
     82                         }
     83 
     84                         if (!bccList.IsNullOrEmpty())
     85                         {
     86                             foreach (string email in bccList)
     87                             {
     88                                 if (UtilityService.IsValidEmail(email))
     89                                 {
     90                                     validEmailBccList.Add(email);
     91                                 }
     92                             }
     93                         }
     94 
     95                         if (!validEmailBccList.IsNullOrEmpty())
     96                         {
     97                             finalBccRecipients = validEmailBccList.Where(m => !finalToRecipients.Contains(m)).Distinct();
     98                         }
     99 
    100                         foreach (string to in finalToRecipients)
    101                         {
    102                             mailMsg.To.Add(to);
    103                         }
    104                         if (!finalCcRecipients.IsNullOrEmpty())
    105                         {
    106                             foreach (string cc in finalCcRecipients)
    107                             {
    108                                 mailMsg.CC.Add(cc);
    109                             }
    110                         }
    111 
    112                         //BCC
    113                         if (!finalBccRecipients.IsNullOrEmpty())
    114                         {
    115                             foreach (string bcc in finalBccRecipients)
    116                             {
    117                                 mailMsg.Bcc.Add(bcc);
    118                             }
    119                         }
    120 
    121                         //attachments
    122                         if (!attachments.IsNullOrEmpty())
    123                         {
    124                             foreach (string attachment in attachments)
    125                             {
    126                                 Attachment attachmentFile = new Attachment(attachment); //create the attachment
    127                                 mailMsg.Attachments.Add(attachmentFile);
    128                             }
    129                         }
    130 
    131                         if (!stream.IsNull() && fileName.ToLower().IndexOf(".pdf") > 0)
    132                         {
    133                             ContentType ct = new ContentType(MediaTypeNames.Application.Pdf);
    134                             Attachment attachmentFile = new Attachment(stream, ct); //create the attachment
    135                             mailMsg.Attachments.Add(attachmentFile);
    136                             attachmentFile.ContentDisposition.FileName = fileName;
    137                         }
    138                         if (!stream.IsNull() && fileName.ToLower().IndexOf(".xlsx") > 0)
    139                         {
    140                             Attachment attachmentFile = new Attachment(stream, fileName); //create the attachment
    141                             mailMsg.Attachments.Add(attachmentFile);
    142                             attachmentFile.ContentDisposition.FileName = fileName;
    143                         }
    144 
    145                         mailMsg.IsBodyHtml = true;
    146                         // From
    147                         MailAddress mailAddress = new MailAddress(FROM, FROM_DISPLAY_NAME);
    148                         mailMsg.From = mailAddress;
    149 
    150                         // Subject and Body
    151                         if (emailTriggerStatus == Globals.EMAIL_SEND_PRIMARY_EMAIL_TESTING)
    152                         {
    153                             subject = "[RTS TEST IGNORE]: " + subject;
    154                         }
    155 
    156                         if (!SUBACCOUNT.IsNullOrEmpty())
    157                         {
    158                             mailMsg.Headers.Add("X-MC-Subaccount", SUBACCOUNT);
    159                         }
    160 
    161                         mailMsg.Subject = subject;
    162                         mailMsg.Body = body;
    163 
    164                         // Init SmtpClient and send
    165                         SmtpClient smtpClient = new SmtpClient();
    166                         if (!string.IsNullOrEmpty(USERNAME) && !string.IsNullOrEmpty(PASSWORD))
    167                         {
    168                             NetworkCredential credentials = new NetworkCredential(USERNAME, PASSWORD);
    169                             smtpClient.Credentials = credentials;
    170                         }
    171                         smtpClient.Timeout = Convert.ToInt32(TIMEOUT);
    172                         smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    173                         smtpClient.Host = HOST;
    174                         smtpClient.Port = Convert.ToInt32(PORT);
    175                         smtpClient.EnableSsl = ENABLESSL;
    176                         smtpClient.UseDefaultCredentials = true;
    177                         smtpClient.Send(mailMsg);
    178 
    179                         mailMsg.Attachments.Dispose();
    180                         mailMsg.Dispose();
    183                 }
    184             }
    185             catch (Exception ex)
    186             {
    187                 msg = ex.Message;
    188                 logger.Error(ex);
    189             }
    190             finally
    191             {
    192                 if (!stream.IsNull())
    193                     stream.Close();
    194             }
    195             return msg;
    196         }
    197 
    198         public static string Send(List<string> toList, List<string> ccList, string subject, string body, List<string> attachments)
    199         {
    200             return Send(toList, ccList, null, subject, body, attachments);
    201         }
    202 
    203         public static void SendApprovalNotifyEmail(string emailTo, List<AlertEmailUserInfo> alertEmailUserInfos,
    204                                                    List<string> emailCC = null, List<string> emailBCC = null,
    205                                                    List<string> attachment = null, string subject = "",
    206                                                    string text = "", SendType sendType = SendType.PreAlert)
    207         {
    208             try
    209             {
    210                 SendEmail(emailTo, alertEmailUserInfos, emailCC, emailBCC, attachment, subject, text, sendType);
    211             }
    212             catch (Exception ex)
    213             {
    214                 logger.Error(ex.ToString());
    215             }
    216         }
    217 
    218         private static void SendEmail(string emailTo, List<AlertEmailUserInfo> alertEmailUserInfos,
    219                                       List<string> emailCC = null, List<string> emailBCC = null,
    220                                       List<string> attachment = null, string subject = "",
    221                                       string perText = "", SendType sendType = SendType.PreAlert)
    222         {
    223             try
    224             {
    225                 HtmlDocument html = new HtmlDocument();
    226                 string tempPath = ConfigurationManager.AppSettings["TemplatePath"];
    227                 html.Load(tempPath);
    228                 StringBuilder sb = new StringBuilder();
    229                 sb.Append("<table>");
    230                 sb.Append("<thead>");
    231                 sb.Append("<tr>");
    232                 sb.Append("<td>email</td><td>ID</td>");
    233                 sb.Append("</tr>");
    234                 sb.Append("</thead>");
    235                 sb.Append("<tbody>");
    236                 foreach (var item in alertEmailUserInfos)
    237                 {
    238                     sb.Append("<tr>");
    239                     sb.AppendFormat("<td>{0}</td>", item.a);
    240                     sb.AppendFormat("<td>{0}</td>", item.b);
    241                     sb.AppendFormat("<td " + (item.c? "class="redText"" : "") + ">{0}</td>", item.d);
    242                    
    243                     sb.Append("</tr>");
    244                 }
    245                 sb.Append("</tbody>");
    246                 sb.Append("</table>");
    247                 var nodeCollection = html.DocumentNode.SelectNodes("//*[@id="tableParent"]");
    248                 foreach (var item in nodeCollection)
    249                 {
    250                     item.InnerHtml = sb.ToString();
    251                 }
    252                 using (MemoryStream stream = new MemoryStream())
    253                 {
    254                     html.Save(stream);
    255                     stream.Seek(0, SeekOrigin.Begin);
    256                     if (stream != null)
    257                     {
    258                         using (StreamReader streamGSKU = new StreamReader(stream))
    259                         {
    260                             string plmail = "";
    261                             List<string> emailToList = new List<string>();
    262                             emailToList.AddRange(emailTo.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
    263                             plmail = Send(emailToList, emailCC, emailBCC, subject, perText + "<br/><br/>" + streamGSKU.ReadToEnd(),
    264                                           attachment);
    265                         }
    266                     }
    267                 }
    268             }
    269             catch (Exception ex)
    270             {
    271                 logger.Error(ex.ToString());
    272             }
    273         }
    274     }
    275 }
  • 相关阅读:
    Docker最全教程之使用Tencent Hub来完成CI(九)
    程序员十大热门flag,有你的吗?
    互联网寒冬,阿里Ant Design还开坑,程序员该何去何从?
    Docker最全教程——从理论到实战(八)
    开源库Magicodes.Storage正式发布
    Docker最全教程——从理论到实战(七)
    开源库支付库Magicodes.Pay发布
    产品经理如何避免被程序员打?
    Docker最全教程——从理论到实战(六)
    如何解决input file 选取相同文件后,change事件不起作用解决方法
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/11457171.html
Copyright © 2011-2022 走看看