1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Lumisoft.NET組件與.NETAPI實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析-創(chuàng)新互聯(lián)

      這篇文章主要介紹“Lumisoft.NET組件與.NET API實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析”,在日常操作中,相信很多人在Lumisoft.NET組件與.NET API實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Lumisoft.NET組件與.NET API實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

      成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元分宜做網(wǎng)站,已為上家服務(wù),為分宜各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

      1、.NET的郵件發(fā)送功能實(shí)現(xiàn)
      .NET本身封裝了一個(gè)SmtpClient類以及相關(guān)的郵件對(duì)象類,這樣利用這些類庫(kù),也可以方便實(shí)現(xiàn)郵件的發(fā)送功能的了。

      如添加發(fā)送人地址,抄送地址,以及暗送地址(多個(gè)地址用逗號(hào)分開(kāi))代碼如下。


      復(fù)制代碼 代碼如下:


      string toEmails = mailInfo.ToEmail;

                  string bcc = "";
                  mailInfo.RecipientBCC.ForEach(obj => bcc += string.Format("{0},", obj));
                  bcc = bcc.Trim(',');

                  string cc = "";
                  mailInfo.RecipientCC.ForEach(obj => cc += string.Format("{0},", obj));
                  cc = cc.Trim(',');

                  MailMessage mail = new MailMessage(settingInfo.MailFrom, toEmails);
                  if (!string.IsNullOrEmpty(bcc))
                  {
                      mail.Bcc.Add(bcc);
                  }
                  if (!string.IsNullOrEmpty(cc))
                  {
                      mail.CC.Add(cc);
                  }

      .NET的附件和嵌入式資源由對(duì)象Attachment和LinkedResource進(jìn)行管理,他們的利用代碼如下所示:


      復(fù)制代碼 代碼如下:


      //附件
                  foreach (string fileName in mailInfo.Attachments)
                  {
                      mail.Attachments.Add(new Attachment(fileName));
                  }

                  //嵌入資源
                  AlternateView view = AlternateView.CreateAlternateViewFromString(mailInfo.Body, Encoding.UTF8, MediaTypeNames.Text.Html);
                  foreach (LinkedAttachementInfo link in mailInfo.EmbedObjects)
                  {
                      LinkedResource resource = new LinkedResource(link.Stream, link.MimeType);
                      resource.ContentId = link.ContentId;
                      view.LinkedResources.Add(resource);
                  }
                  mail.AlternateViews.Add(view);

      發(fā)送郵件的其他部分代碼如下所示


      復(fù)制代碼 代碼如下:


      mail.IsBodyHtml = mailInfo.IsBodyHtml;
                  mail.BodyEncoding = Encoding.UTF8;
                  mail.Subject = mailInfo.Subject;
                  mail.SubjectEncoding = Encoding.UTF8;

                  //發(fā)送賬戶設(shè)置信息
                  SmtpClient client = new SmtpClient();
                  client.Host = settingInfo.SmtpServer;
                  client.Port = settingInfo.SmptPort;
                  client.UseDefaultCredentials = false;
                  client.DeliveryMethod = SmtpDeliveryMethod.Network;
                  client.Credentials = new NetworkCredential(settingInfo.SmtpUser, settingInfo.SmtpPass);

                  bool success = false;
                  try
                  {
                      client.Send(mail);
                      success = true;
                  }
                  catch (Exception ex)
                  {
                      LogTextHelper.Error(ex);
                      //throw;
                  }

      上面利用.net的SmtpClient發(fā)送郵件操作的完整代碼如下:


      復(fù)制代碼 代碼如下:


      ///


              /// 發(fā)送外部郵件(系統(tǒng)配置,系統(tǒng)郵件)
              ///

              /// 發(fā)送郵件信息
              ///
              public CommonResult Send(MailInfo mailInfo)
              {
                  CommonResult result = new CommonResult();
                  try
                  {
                      AppConfig config = new AppConfig();
                      string MailDomain = config.AppConfigGet("MailDomain");
                      string MailUsername = config.AppConfigGet("MailUsername");
                      string MailPassword = config.AppConfigGet("MailPassword");
                      string MailPort = config.AppConfigGet("MailPort");
                      string MailFrom = config.AppConfigGet("MailFrom");
                      int port = 25;
                      int.TryParse(MailPort, out port);

                      SmtpSettingInfo settingInfo = new SmtpSettingInfo(MailDomain, port,
                          MailUsername, MailPassword, MailFrom);

                      result.Success = PrivateSendEmail(mailInfo, settingInfo);
                  }
                  catch (Exception ex)
                  {
                      result.ErrorMessage = ex.Message;
                      throw;
                  }

                  return result;
              }

              ///


              /// 通用發(fā)送郵件操作
              ///

              private static bool PrivateSendEmail(MailInfo mailInfo, SmtpSettingInfo settingInfo)
              {         
                  string toEmails = mailInfo.ToEmail;

                  string bcc = "";
                  mailInfo.RecipientBCC.ForEach(obj => bcc += string.Format("{0},", obj));
                  bcc = bcc.Trim(',');

                  string cc = "";
                  mailInfo.RecipientCC.ForEach(obj => cc += string.Format("{0},", obj));
                  cc = cc.Trim(',');

                  MailMessage mail = new MailMessage(settingInfo.MailFrom, toEmails);
                  if (!string.IsNullOrEmpty(bcc))
                  {
                      mail.Bcc.Add(bcc);
                  }
                  if (!string.IsNullOrEmpty(cc))
                  {
                      mail.CC.Add(cc);
                  }

                  //附件
                  foreach (string fileName in mailInfo.Attachments)
                  {
                      mail.Attachments.Add(new Attachment(fileName));
                  }

                  //嵌入資源
                  AlternateView view = AlternateView.CreateAlternateViewFromString(mailInfo.Body, Encoding.UTF8, MediaTypeNames.Text.Html);
                  foreach (LinkedAttachementInfo link in mailInfo.EmbedObjects)
                  {
                      LinkedResource resource = new LinkedResource(link.Stream, link.MimeType);
                      resource.ContentId = link.ContentId;
                      view.LinkedResources.Add(resource);
                  }
                  mail.AlternateViews.Add(view);
                  mail.IsBodyHtml = mailInfo.IsBodyHtml;
                  mail.BodyEncoding = Encoding.UTF8;
                  mail.Subject = mailInfo.Subject;
                  mail.SubjectEncoding = Encoding.UTF8;

                  //發(fā)送賬戶設(shè)置信息
                  SmtpClient client = new SmtpClient();
                  client.Host = settingInfo.SmtpServer;
                  client.Port = settingInfo.SmptPort;
                  client.UseDefaultCredentials = false;
                  client.DeliveryMethod = SmtpDeliveryMethod.Network;
                  client.Credentials = new NetworkCredential(settingInfo.SmtpUser, settingInfo.SmtpPass);

                  bool success = false;
                  try
                  {
                      client.Send(mail);
                      success = true;
                  }
                  catch (Exception ex)
                  {
                      LogTextHelper.Error(ex);
                      //throw;
                  }

                  string message = string.Format("發(fā)送給【{0}】的郵件“{1}”,{2},時(shí)間:{3}",
                      mailInfo.ToEmail[0], mailInfo.Subject, success ? "發(fā)送成功" : "發(fā)送失敗", DateTime.Now);
                  LogTextHelper.Info(message);

                  return success;
              }

      2、基于Lumisoft.NET組件的郵件發(fā)送功能實(shí)現(xiàn)

      基于Lumisoft.NET組件的郵件發(fā)送,也是一種很常用的,因?yàn)檫@個(gè)開(kāi)源組件非常強(qiáng)大,經(jīng)常可以在一些程序中被使用。

      這個(gè)發(fā)送郵件的功能主要是利用SMTP_Client類來(lái)實(shí)現(xiàn)的,如下代碼所示。注意其中的Authenticate函數(shù)已經(jīng)被舍棄,可以使用Auth方法進(jìn)行驗(yàn)證。但是函數(shù)參數(shù)有所不同,根據(jù)驗(yàn)證對(duì)象,使用不同的驗(yàn)證方式,一般選擇AUTH_SASL_Client_Plain對(duì)象即可。


      復(fù)制代碼 代碼如下:


      public bool Send()
              {
                  bool sended = false;
                  using (SMTP_Client client = new SMTP_Client())
                  {
                      client.Connect(smtpServer, smtpPort, smtpUseSsl);
                      client.EhloHelo(smtpServer);
                      var authhh = new AUTH_SASL_Client_Plain(username, password);
                      client.Auth(authhh);
                      //client.Authenticate(username, password);
                      //string text = client.GreetingText;
                      client.MailFrom(from, -1);
                      foreach (string address in toList.Keys)
                      {
                          client.RcptTo(address);
                      }

                      //采用Mail_Message類型的Stream
                      Mail_Message m = Create_PlainText_Html_Attachment_Image(toList, ccList, from, fromDisplay, subject, body, attachments);
                      using (MemoryStream stream = new MemoryStream())
                      {
                          m.ToStream(stream, new MIME_Encoding_EncodedWord(MIME_EncodedWordEncoding.Q, Encoding.UTF8), Encoding.UTF8);
                          stream.Position = 0;
                          client.SendMessage(stream);

                          sended = true;
                      }
                      if (m != null)
                      {
                          m.Dispose();
                      }

                      client.Disconnect();
                  }
                  return sended;
              }

      構(gòu)造用于SMTP發(fā)送的數(shù)據(jù),可以使用Mail_Message 對(duì)象,也可以使用Mime對(duì)象,雖然讀都可以實(shí)現(xiàn)發(fā)送功能,不過(guò)Mime對(duì)象是舍棄的對(duì)象了。

      構(gòu)造Mail_Message對(duì)象后,創(chuàng)建用于發(fā)送的格式要轉(zhuǎn)換為Stream對(duì)象。轉(zhuǎn)換為發(fā)送的Stream操作如下所示。


      復(fù)制代碼 代碼如下:


      using (MemoryStream stream = new MemoryStream())
      {
              m.ToStream(stream, new MIME_Encoding_EncodedWord(MIME_EncodedWordEncoding.Q, Encoding.UTF8), Encoding.UTF8);
              stream.Position = 0;
              client.SendMessage(stream);

              sended = true;
       }

      構(gòu)造Mail_Message格式的郵件操作如下所示。


      復(fù)制代碼 代碼如下:


      private Mail_Message Create_PlainText_Html_Attachment_Image(Dictionary tomails, Dictionary ccmails, string mailFrom, string mailFromDisplay,
                  string subject, string body, Dictionary attachments, string notifyEmail = "", string plaintTextTips = "")
              {
                  Mail_Message msg = new Mail_Message();
                  msg.MimeVersion = "1.0";
                  msg.MessageID = MIME_Utils.CreateMessageID();
                  msg.Date = DateTime.Now;
                  msg.Subject = subject;
                  msg.From = new Mail_t_MailboxList();
                  msg.From.Add(new Mail_t_Mailbox(mailFromDisplay, mailFrom));
                  msg.To = new Mail_t_AddressList();
                  foreach (string address in tomails.Keys)
                  {
                      string displayName = tomails[address];
                      msg.To.Add(new Mail_t_Mailbox(displayName, address));
                  }
                  msg.Cc = new Mail_t_AddressList();
                  foreach (string address in ccmails.Keys)
                  {
                      string displayName = ccmails[address];
                      msg.Cc.Add(new Mail_t_Mailbox(displayName, address));
                  }     

                  //設(shè)置回執(zhí)通知
                  if (!string.IsNullOrEmpty(notifyEmail) && ValidateUtil.IsEmail(notifyEmail))
                  {
                      msg.DispositionNotificationTo.Add(new Mail_t_Mailbox(notifyEmail, notifyEmail));
                  }

                  #region MyRegion

                  //--- multipart/mixed -----------------------------------
                  MIME_h_ContentType contentType_multipartMixed = new MIME_h_ContentType(MIME_MediaTypes.Multipart.mixed);
                  contentType_multipartMixed.Param_Boundary = Guid.NewGuid().ToString().Replace('-', '.');
                  MIME_b_MultipartMixed multipartMixed = new MIME_b_MultipartMixed(contentType_multipartMixed);
                  msg.Body = multipartMixed;

                  //--- multipart/alternative -----------------------------
                  MIME_Entity entity_multipartAlternative = new MIME_Entity();
                  MIME_h_ContentType contentType_multipartAlternative = new MIME_h_ContentType(MIME_MediaTypes.Multipart.alternative);
                  contentType_multipartAlternative.Param_Boundary = Guid.NewGuid().ToString().Replace('-', '.');
                  MIME_b_MultipartAlternative multipartAlternative = new MIME_b_MultipartAlternative(contentType_multipartAlternative);
                  entity_multipartAlternative.Body = multipartAlternative;
                  multipartMixed.BodyParts.Add(entity_multipartAlternative);

                  //--- text/plain ----------------------------------------
                  MIME_Entity entity_text_plain = new MIME_Entity();
                  MIME_b_Text text_plain = new MIME_b_Text(MIME_MediaTypes.Text.plain);
                  entity_text_plain.Body = text_plain;

                  //普通文本郵件內(nèi)容,如果對(duì)方的收件客戶端不支持HTML,這是必需的
                  string plainTextBody = "如果你郵件客戶端不支持HTML格式,或者你切換到“普通文本”視圖,將看到此內(nèi)容";
                  if (!string.IsNullOrEmpty(plaintTextTips))
                  {
                      plainTextBody = plaintTextTips;
                  }

                  text_plain.SetText(MIME_TransferEncodings.QuotedPrintable, Encoding.UTF8, plainTextBody);
                  multipartAlternative.BodyParts.Add(entity_text_plain);

                  //--- text/html -----------------------------------------
                  string htmlText = body;//"這是一份測(cè)試郵件,來(lái)自LumiSoft.Net";
                  MIME_Entity entity_text_html = new MIME_Entity();
                  MIME_b_Text text_html = new MIME_b_Text(MIME_MediaTypes.Text.html);
                  entity_text_html.Body = text_html;
                  text_html.SetText(MIME_TransferEncodings.QuotedPrintable, Encoding.UTF8, htmlText);
                  multipartAlternative.BodyParts.Add(entity_text_html);

                  //--- application/octet-stream -------------------------
                  WebClient client = new WebClient();
                  foreach (string attach in attachments.Keys)
                  {
                      try
                      {
                          byte[] bytes = client.DownloadData(attach);
                          using (MemoryStream stream = new MemoryStream(bytes))
                          {
                              multipartMixed.BodyParts.Add(Mail_Message.CreateAttachment(stream, attachments[attach]));
                          }
                      }
                      catch (Exception ex)
                      {
                          LogTextHelper.Error(ex);
                      }
                  }

                  #endregion

                  return msg;
              }

      而構(gòu)造Mime格式的操作如下所示。


      復(fù)制代碼 代碼如下:


      private Mime Create_Html_Attachment_Image(string mailTo, string mailFrom, string mailFromDisplay,
                  string subject, string body, List attachments, Dictionary embedImages, string notifyEmail = "", string plaintTextTips = "",
                  string replyEmail = "")
              {
                  Mime m = new Mime();
                  MimeEntity mainEntity = m.MainEntity;

                  mainEntity.From = new AddressList();
                  mainEntity.From.Add(new MailboxAddress(mailFromDisplay, mailFrom));
                  mainEntity.To = new AddressList();
                  mainEntity.To.Add(new MailboxAddress(mailTo, mailTo));
                  mainEntity.Subject = subject;
                  mainEntity.ContentType = MediaType_enum.Multipart_mixed;

                  //設(shè)置回執(zhí)通知
                  if (!string.IsNullOrEmpty(notifyEmail) && ValidateUtil.IsEmail(notifyEmail))
                  {
                      mainEntity.DSN = notifyEmail;
                  }

                  //設(shè)置統(tǒng)一回復(fù)地址
                  if (!string.IsNullOrEmpty(replyEmail) && ValidateUtil.IsEmail(replyEmail))
                  {
                      mainEntity.ReplyTo = new AddressList();
                      mainEntity.ReplyTo.Add(new MailboxAddress(replyEmail, replyEmail));
                  }

                  MimeEntity textEntity = mainEntity.ChildEntities.Add();
                  textEntity.ContentType = MediaType_enum.Text_html;
                  textEntity.ContentTransferEncoding = ContentTransferEncoding_enum.QuotedPrintable;
                  textEntity.DataText = body;

                  //附件
                  foreach (string attach in attachments)
                  {
                      MimeEntity attachmentEntity = mainEntity.ChildEntities.Add();
                      attachmentEntity.ContentType = MediaType_enum.Application_octet_stream;
                      attachmentEntity.ContentDisposition = ContentDisposition_enum.Attachment;
                      attachmentEntity.ContentTransferEncoding = ContentTransferEncoding_enum.Base64;
                      FileInfo file = new FileInfo(attach);
                      attachmentEntity.ContentDisposition_FileName = file.Name;
                      attachmentEntity.DataFromFile(attach);
                  }

                  //嵌入圖片
                  foreach (string key in embedImages.Keys)
                  {
                      MimeEntity attachmentEntity = mainEntity.ChildEntities.Add();
                      attachmentEntity.ContentType = MediaType_enum.Application_octet_stream;
                      attachmentEntity.ContentDisposition = ContentDisposition_enum.Inline;
                      attachmentEntity.ContentTransferEncoding = ContentTransferEncoding_enum.Base64;
                      string imageFile = embedImages[key];
                      FileInfo file = new FileInfo(imageFile);
                      attachmentEntity.ContentDisposition_FileName = file.Name;

                      //string displayName = Path.GetFileNameWithoutExtension(fileName);
                      attachmentEntity.ContentID = key;//BytesTools.BytesToHex(Encoding.Default.GetBytes(fileName));

                      attachmentEntity.DataFromFile(imageFile);
                  }

                  return m;
              }

      綜合以上兩者的發(fā)送功能,都可以實(shí)現(xiàn)郵件的發(fā)送操作,如下界面是發(fā)送郵件界面。


      Lumisoft.NET組件與.NET API實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析

      3、LumiSoft.NET存儲(chǔ)eml郵件文件以及發(fā)送eml文件操作

      除了上面的發(fā)送普通郵件,Lumisoft還支持吧郵件序列號(hào)存儲(chǔ)到文件(.eml郵件文件)里面,然后也可以通過(guò)把文件讀取到流里面,進(jìn)行發(fā)送,對(duì)于某種場(chǎng)合,可以把郵件存儲(chǔ)到eml文件是一個(gè)很好的操作。

      存儲(chǔ)EML文件的相關(guān)操作如下所示。


      復(fù)制代碼 代碼如下:


      private void btnCreateFile_Click(object sender, EventArgs e)
              {
                  string attachFile = Path.Combine(Application.StartupPath, "Attachment/Hotel2.png");
                  List attachments = new List();
                  attachments.Add(attachFile);
                  string subject = "測(cè)試郵件";
                  string body = "這是一份測(cè)試郵件,來(lái)自LumiSoft.Net";
                  string bodyEmbedy = "這是一份測(cè)試郵件,來(lái)自LumiSoft.Net";
                  Dictionary embedList = new Dictionary();
                  embedList.Add("test.jpg", "C:\\test.jpg");

                  //存儲(chǔ)為Eml文件
                  string path = Path.Combine(Application.StartupPath, "Eml");
                  DirectoryUtil.AssertDirExist(path);
                  string emlFile = string.Format("{0}/{1}.eml", path, DateTime.Now.ToFileTime());

                  Mime m = Create_Html_Attachment_Image(to, from, from, subject, bodyEmbedy, attachments, embedList);
                  m.ToFile(emlFile);

                  MessageUtil.ShowTips("OK");
              }

      發(fā)送EML文件操作如下所示。


      復(fù)制代碼 代碼如下:


      private void btnSendFile_Click(object sender, EventArgs e)
              {
                  using (SMTP_Client client = new SMTP_Client())
                  {
                      int smtpPort = smtpUseSsl ? WellKnownPorts.SMTP_SSL : WellKnownPorts.SMTP;

                      client.Connect(smtpServer, smtpPort, smtpUseSsl);
                      client.EhloHelo(smtpServer);
                      //var authhh = new AUTH_SASL_Client_Plain(username, password);
                      //client.Auth(authhh);
                      client.Authenticate(username, password);
                      //string text = client.GreetingText;
                      client.MailFrom(from, -1);
                      client.RcptTo(to);

                      string path = Path.Combine(Application.StartupPath, "Eml");
                      string emlFile = Directory.GetFiles(path)[0];
                      var msg = Mail_Message.ParseFromFile(emlFile);

                      MemoryStream stream = new MemoryStream();
                      msg.ToStream(stream, new MIME_Encoding_EncodedWord(MIME_EncodedWordEncoding.Q, Encoding.UTF8), Encoding.UTF8);
                      stream.Position = 0;
                      client.SendMessage(stream);
                      client.Disconnect();
                  }
                  MessageUtil.ShowTips("OK");
              }



      到此,關(guān)于“Lumisoft.NET組件與.NET API實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


      當(dāng)前名稱:Lumisoft.NET組件與.NETAPI實(shí)現(xiàn)郵件發(fā)送功能的對(duì)比分析-創(chuàng)新互聯(lián)
      文章鏈接:http://www.ef60e0e.cn/article/hsdji.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        涟水县| 株洲县| 白朗县| 文成县| 洛扎县| 策勒县| 德庆县| 北辰区| 西和县| 正宁县| 日照市| 万源市| 岳阳市| 黄大仙区| 长武县| 鸡泽县| 建瓯市| 巴彦淖尔市| 民和| 德令哈市| 六枝特区| 溧水县| 镇江市| 平潭县| 赤水市| 永昌县| 平和县| 新龙县| 调兵山市| 渭南市| 阳信县| 曲水县| 嘉义县| 万盛区| 山东| 望城县| 合阳县| 阿瓦提县| 莱芜市| 琼结县| 顺昌县|