亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#使用系統方法發送異步郵件完整實例

2020-01-24 01:03:30
字體:
來源:轉載
供稿:網友

本文實例講述了C#使用系統方法發送異步郵件。分享給大家供大家參考,具體如下:

項目背景:

最近在對幾年前的一個項目進行重構,發現發送郵件功能需要一定的時間來處理,而由于發送是同步的因此導致在發送郵件時無法執行后續的操作

實際上發送郵件后只需要將發送結果寫入系統日志即可對其他業務沒有任何影響,因此決定將發送郵件操作更改為異步的

由于使用的是C#的郵件類庫,而C#本身已經提供了異步發送的功能即只需要將Send方法更改為SendAsync即可,更改方法名并不難但發送后再寫入日志就有點難了

因為項目中發送郵件是單獨的組件,所以我不可能在發送郵件類庫中直接添加寫入日志操作(不在同一個類庫,網絡和MSDN上的例子都是同一組件下)

但C#可以使用委托將方法作為參數來傳遞的,因此我就可以在發送郵件的方法中添加一個回調方法,在異步發送郵件后再執行回調方法即可

完整代碼:

/****************************************************************** * 創建人:HTL * 說明:C# 發送異步郵件Demo *******************************************************************/using System;using System.Net.Mail;namespace SendAsyncEmailTest{  class Program  {    const string dateFormat = "yyyy-MM-dd :HH:mm:ss:ffffff";    static void Main(string[] args)    {      Console.WriteLine("開始異步發送郵件,時間:" + DateTime.Now.ToString(dateFormat));      new MailHelper().SendAsync("Send Async Email Test", "This is Send Async Email Test", "huangyuan413026@163.com", emailCompleted);      Console.WriteLine("郵件正在異步發送,時間:" + DateTime.Now.ToString(dateFormat));      Console.ReadKey();      Console.WriteLine();    }    /// <summary>    /// 郵件發送后的回調方法    /// </summary>    /// <param name="message"></param>    static void emailCompleted(string message)    {      //延時1秒      System.Threading.Thread.Sleep(1000);      Console.WriteLine();      Console.WriteLine("郵件發送結果:/r/n" + (message == "true" ? "郵件發送成功" : "郵件發送失敗") + ",時間:" + DateTime.Now.ToString(dateFormat));      //寫入日志    }  }  /// <summary>  /// 發送郵件類  /// </summary>  public class MailHelper  {    public delegate int MethodDelegate(int x, int y);    private readonly int smtpPort = 25;    readonly string SmtpServer = "smtp.baidu.com";    private readonly string UserName = "support@baidu.com";    readonly string Pwd = "baidu.com";    private readonly string AuthorName = "BaiDu";    public string Subject { get; set; }    public string Body { get; set; }    public string Tos { get; set; }    public bool EnableSsl { get; set; }    MailMessage GetClient    {      get      {        if (string.IsNullOrEmpty(Tos)) return null;        MailMessage mailMessage = new MailMessage();        //多個接收者        foreach (string _str in Tos.Split(','))        {          mailMessage.To.Add(_str);        }        mailMessage.From = new System.Net.Mail.MailAddress(UserName, AuthorName);        mailMessage.Subject = Subject;        mailMessage.Body = Body;        mailMessage.IsBodyHtml = true;        mailMessage.BodyEncoding = System.Text.Encoding.UTF8;        mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;        mailMessage.Priority = System.Net.Mail.MailPriority.High;        return mailMessage;      }    }    SmtpClient GetSmtpClient    {      get      {        return new SmtpClient        {          UseDefaultCredentials = false,          Credentials = new System.Net.NetworkCredential(UserName, Pwd),          DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,          Host = SmtpServer,          Port = smtpPort,          EnableSsl = EnableSsl,        };      }    }    //回調方法    Action<string> actionSendCompletedCallback = null;    ///// <summary>    ///// 使用異步發送郵件    ///// </summary>    ///// <param name="subject">主題</param>    ///// <param name="body">內容</param>    ///// <param name="to">接收者,以,分隔多個接收者</param>    //// <param name="_actinCompletedCallback">郵件發送后的回調方法</param>    ///// <returns></returns>    public void SendAsync(string subject, string body, string to, Action<string> _actinCompletedCallback)    {      if (string.IsNullOrEmpty(to)) return;      Tos = to;      SmtpClient smtpClient = GetSmtpClient;      MailMessage mailMessage = GetClient;      if (smtpClient == null || mailMessage == null) return;      Subject = subject;      Body = body;      EnableSsl = false;      //發送郵件回調方法      actionSendCompletedCallback = _actinCompletedCallback;      smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);      try      {        smtpClient.SendAsync(mailMessage, "true");//異步發送郵件,如果回調方法中參數不為"true"則表示發送失敗      }      catch (Exception e)      {        throw new Exception(e.Message);      }      finally      {        smtpClient = null;        mailMessage = null;      }    }    /// <summary>    /// 異步操作完成后執行回調方法    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    private void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e)    {      //同一組件下不需要回調方法,直接在此寫入日志即可      //寫入日志      //return;      if (actionSendCompletedCallback == null) return;      string message = string.Empty;      if (e.Cancelled)      {        message = "異步操作取消";      }      else if (e.Error != null)      {        message = (string.Format("UserState:{0},Message:{1}", (string)e.UserState, e.Error.ToString()));      }      else        message = (string)e.UserState;      //執行回調方法      actionSendCompletedCallback(message);    }  }}

運行效果圖如下:

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#窗體操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#數據結構與算法教程》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxxx妇黄裸体| 日韩中文字幕在线精品| 91福利视频网| 欧美国产中文字幕| 亚洲综合色av| 日韩av在线高清| 国产精品久久久久aaaa九色| 国产亚洲精品美女久久久| 久久国产精品免费视频| 日韩一区视频在线| 成人激情视频免费在线| 在线精品视频视频中文字幕| 国产一区二区色| 亚洲人精选亚洲人成在线| 成人黄色网免费| 亚洲欧美国产一区二区三区| 麻豆国产va免费精品高清在线| 日韩在线观看网址| 亚洲黄色有码视频| 国产九九精品视频| 国产精品高清在线观看| 福利一区福利二区微拍刺激| 国产精品极品尤物在线观看| 亚洲精品91美女久久久久久久| 国语自产精品视频在免费| 欧美日韩ab片| 日韩在线观看免费全集电视剧网站| 日韩小视频在线| 日韩有码视频在线| 欧美精品在线视频观看| 欧美丝袜第一区| 亚洲免费视频网站| 国产精品啪视频| 亚洲国产成人久久综合| 久99九色视频在线观看| 成人精品视频99在线观看免费| 亚洲偷欧美偷国内偷| 欧美在线中文字幕| 国产视频欧美视频| 欧美亚洲一级片| 亚洲一区二区久久久| yellow中文字幕久久| 亚洲日本成人网| 亚洲国产精品悠悠久久琪琪| 精品视频在线导航| 一区二区三区国产在线观看| 亚洲国产精品999| 91在线视频成人| 在线免费看av不卡| 26uuu日韩精品一区二区| 亚洲欧美国内爽妇网| 亚洲国产精品久久久| 51精品国产黑色丝袜高跟鞋| 欧美成人精品影院| 久久久精品2019中文字幕神马| 久久久中精品2020中文| 亚洲欧洲美洲在线综合| 美女精品视频一区| 亚洲一区久久久| 国产成人精品网站| 精品国产欧美一区二区五十路| 国产精品久久久久久久久久| 欧美黑人极品猛少妇色xxxxx| 日韩免费av片在线观看| 精品国偷自产在线视频99| 久久天天躁日日躁| 亚洲成成品网站| 亚洲美女av在线播放| 亚洲高清免费观看高清完整版| 成人日韩av在线| 国模叶桐国产精品一区| 日韩av免费在线观看| 欧美午夜片在线免费观看| 精品福利在线看| 亚洲免费伊人电影在线观看av| 亚洲免费人成在线视频观看| 欧美激情视频三区| 欧美日韩午夜激情| 国产精品成人品| 日韩一区av在线| 国产亚洲精品91在线| 国产精品自产拍在线观看中文| 欧洲一区二区视频| 亚洲情综合五月天| 国产精品一区二区电影| 国产成人精品日本亚洲专区61| 日韩精品免费在线播放| 91精品国产乱码久久久久久蜜臀| 欧美激情一二区| 在线观看精品自拍私拍| 亚洲国产天堂网精品网站| 欧美日韩国产一区在线| 久久综合九色九九| 深夜福利国产精品| 日韩精品视频免费专区在线播放| 久久久精品欧美| 久久精品91久久香蕉加勒比| 欧美插天视频在线播放| 国产亚洲人成网站在线观看| 永久免费精品影视网站| 国产精品久久色| 久久久久久伊人| 另类少妇人与禽zozz0性伦| 中文亚洲视频在线| 欧美国产亚洲视频| 精品国产一区二区三区久久狼5月| 亚洲欧美精品伊人久久| 91在线免费网站| 国产精品美乳一区二区免费| 2019中文字幕免费视频| 欧美日韩在线观看视频| 精品久久久国产| 国产97在线观看| 日韩有码在线视频| 国产精品一区二区久久久| 97视频在线观看成人| 欧美成人中文字幕| 欧美日韩一区二区免费在线观看| 岛国精品视频在线播放| 日本人成精品视频在线| 国产精品偷伦一区二区| 成人午夜两性视频| 色狠狠av一区二区三区香蕉蜜桃| 日韩精品免费综合视频在线播放| 欧美成人免费播放| 亚洲aⅴ日韩av电影在线观看| 色妞一区二区三区| 亚洲国产精品999| 亚洲精品suv精品一区二区| 69久久夜色精品国产69乱青草| 久久国产加勒比精品无码| 欧美国产视频一区二区| 欧美极品少妇与黑人| 亚洲成人久久网| 欧美—级高清免费播放| 国产精品丝袜久久久久久不卡| 久久久久国产精品www| 国内外成人免费激情在线视频网站| 国产精品视频午夜| www.日本久久久久com.| 国产精品第一视频| 色妞一区二区三区| 久久国产精品久久久久久久久久| 国产欧美日韩中文| 国产亚洲一区二区在线| 欧美精品福利视频| 亚洲性视频网址| 欧美成人精品在线观看| 亚洲影院色无极综合| 亚洲男人天堂2024| 色悠久久久久综合先锋影音下载| 国产色婷婷国产综合在线理论片a| 91精品国产综合久久久久久久久| 日韩精品视频在线| 亚洲国产精品专区久久| 成人乱色短篇合集| 亚洲成人在线网| 欧美性少妇18aaaa视频| 国产精品青草久久久久福利99| 亚洲最大福利网站| 欧美成人免费一级人片100| 成人久久久久久久| 欧美一级大片在线观看| 亚洲国产精品99久久|