.NET CORE 下收發郵件之 MAILKIT

背景

利用代碼發送郵件在工作中還是比較常見的,相信大家都用過SmtpClient來處理發送郵件的操作,不過這個類以及被標記已過時,所以介紹一個微軟推薦的庫MailKit來處理。

MailKit開源地址:https://github.com/jstedfast/MailKit

需要郵件功能

1、服務提供方:需提供郵件收發客戶端或Web服務。如:QQ郵箱、GMail郵箱、126、163等知名郵件服務提供商。注:如果你使用的第三方不知名郵件服務商提供的郵件收發服務,通過其發出的郵件,可能會被其他知名郵件服務提供商的STMP服務器視為是"惡意郵件或垃圾郵件"!

2、消息推送:消息推送方

3、App:某些網站會員的注冊功能或者功能激活功能。

協議

1、SMTP(Simple Mail Transfer Protocol) ? ---簡單郵件傳輸協議

2、POP3(Post Office Protocol -Version3) ? ---郵局協議第三個版本

代碼實現

1、新建項目 引用?MailKit

using MailKit.Net.Smtp;using MimeKit;

2、指定發件人、收件人、附件等信息

[HttpPost][Route("sendmail")]public bool Sendmail(SendmailDto model){string mailTo = model.mail;string title = model.title;string requestId = Guid.NewGuid().ToString("N");string path = WriteFilepath(requestId, title + ".html", model.str);string docpath = path.Replace(".html", ".docx");try{string applicationRoot = AppContext.BaseDirectory;var provider = new PhysicalFileProvider(applicationRoot);string apath = @"C:/www/fengnan";// string apath = @"C:/net6.0";var filePath =//applicationRoot +apath + $"/Template/fldoc/" + requestId + "/";var filePath2 =//applicationRoot +apath + $"/Template/fldoc/" + requestId + "/"+ title + ".html";ecmd("soffice --headless --convert-to docx:\"Office Open XML Text\" " + filePath2 + " --outdir " + filePath);//   string docpath = path.Replace(".html", ".docx");}catch (Exception ex){_logger.Error(ex);}// string mailFrom = "xxxx@qq.com";string mailFrom = "xxx@xx.net";//   mailTo = "xx@xxx.com";string Text = "內容見附件,請查收<br/> 感謝";string mailFromAccount = "xxx@qq.com";string mailPassword = "xxxx";string mailFromAccount = "xxx@xx.net";string mailPassword = "xxxx@";var contentRoot = Directory.GetCurrentDirectory();var webRoot = Path.Combine(contentRoot, "wwwroot");///  string path = Path.Combine(webRoot, "Images/icc.png");//  string path = @"D:\xxxx知.html";//  string Text = @"Hey Chandler,//I just wanted to let you know that Monica and I were going to go play some paintball, you in?//-- Joey";Config eConfig = new Config{                From = new MailAddress("xxxx", mailFrom),//  Host = "smtp.qq.com",                Host = "smtp.exmail.qq.com",                MailFromAccount = mailFromAccount,                MailPassword = mailPassword,// Port = 587,                Port = 465,                UseSsl = true,                IsHtml = true};List<MailAddress> tos = new List<MailAddress>();tos.Add(new MailAddress("", mailTo));List<string> flist = new List<string>();if (System.IO.File.Exists(docpath)){flist.Add(docpath);//docpath}else{flist.Add(path);}Mailhelper.SendEmail(eConfig, tos, title, Text, flist.ToArray());return true;}

3、發郵件幫助類

using MimeKit;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace DFTech.Service.Filters
{/// <summary>/// 發郵件/// </summary>public class Mailhelper{/// <summary>/// 發郵件/// </summary>/// <param name="config"></param>/// <param name="tos"></param>/// <param name="subject"></param>/// <param name="message"></param>/// <param name="attachments"></param>/// <returns></returns>public  static void SendEmail(Config config, List<MailAddress> tos, string subject, string message, params string[] attachments){var emailMessage = new MimeMessage();emailMessage.From.Add((MailboxAddress)config.From);foreach (var to in tos)emailMessage.To.Add(to as MailAddress);emailMessage.Subject = subject;var alternative = new Multipart("alternative");if (config.IsHtml)alternative.Add(new TextPart("html") { Text = message });elsealternative.Add(new TextPart("plain") { Text = message });if (attachments != null){foreach (string f in attachments){var attachment = new MimePart()//("image", "png"){ContentObject = new ContentObject(File.OpenRead(f), ContentEncoding.Default),ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,FileName = Path.GetFileName(f)};alternative.Add(attachment);}}emailMessage.Body = alternative;using (var client = new SmtpClient()){client.Connect(config.Host, config.Port, config.UseSsl);// SecureSocketOptions.Noneclient.AuthenticationMechanisms.Remove("XOAUTH2");client.Authenticate(config.MailFromAccount, config.MailPassword);client.Send(emailMessage);client.Disconnect(true);}}}public class Config{public int Port { get; set; } = 25; //25public string Host { get; set; } //smtp.hantianwei.cnpublic bool IsHtml { get; set; } = true;public bool UseSsl { get; set; } = false;public string MailFromAccount { get; set; }//mail@hantianwei.cnpublic string MailPassword { get; set; }public MailAddress From { get; set; }}/// <summary>////// </summary>public class MailAddress : MailboxAddress{public MailAddress(string name, string address) : base(name, address){}public MailAddress(Encoding encoding, string name, string address) : base(encoding, name, address){}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281793.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【20181026T2】**圖【最小瓶頸路+非旋Treap+啟發式合并】

題面 【錯解】 最大最小&#xff1f;最小生成樹嘛 蛤&#xff1f;還要求和&#xff1f; 點分治&#xff1f; 不可做啊 寫了個MST暴力LCA&#xff0c;30pts&#xff0c;140多行 事后發現30分是給dijkstra的 woc 【正解】 樹上計數問題&#xff1a;①并查集②啟發式合并③點分治 …

java實現關鍵詞云_Java synchronized 關鍵詞詳細說明

Java synchronized 關鍵詞詳細說明外置專業技能點系統進程和進程的定義進程建立方法進程的情況情況變換線程安全的定義synchronized 關鍵詞的幾類使用方法裝飾非靜態數據組員方式synchronized public void sync(){}裝飾靜態數據組員方式synchronized public static void sync()…

損失函數(Loss function) 和 代價函數(Cost function)

1損失函數和代價函數的區別&#xff1a; 損失函數(Loss function)&#xff1a;指單個訓練樣本進行預測的結果與實際結果的誤差。 代價函數(Cost function)&#xff1a;整個訓練集&#xff0c;所有樣本誤差總和(所有損失函數總和)的平均值。&#xff08;這一步體現在propagate()…

Hadoop/HDFS命令

Hadoop中文手冊&#xff1a;http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 英文手冊&#xff1a;http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/CommandsManual.html Hadoop fs命令 hadoop fs: 該命令可以用于其他文件系統&#x…

《Node.js 入門系列》—— 一些簡單的排錯方法(一)

目錄 TypeError: undefined is not a functionTypeError: Cannot read property xxx of undefined 或者 TypeError: Cannot read property xxx of null檢查變量是未賦值檢查函數是否有返回值檢查變量是否引用了某個對象不存在的屬性檢查調用函數時是否未該傳遞參數俗話說“常在…

內置IOC容器ServiceCollection

.NetCore內置IOC容器ServiceCollection一、IOC介紹IOC&#xff1a;全名(Inversion of Control)-控制反轉IOC意味著我們將對象的創建控制權交給了外部容器&#xff0c;我們不管它是如何創建的&#xff0c;我們只需要知道&#xff0c;當我們想要某個實例時&#xff0c;我們可以直…

java中 有沒有方法將瀏覽器標簽欄去掉_用JS去掉IE窗口的標題欄,工具欄,地址欄...

前言:經常上網的朋友可能會到過這樣一些網站&#xff0c;一進入首頁立刻會彈出一個窗口&#xff0c;或者按一個連接或按鈕彈出&#xff0c;通常在這個窗口里會顯示一些注意事項、版權信息 、警告、歡迎光顧之類的話或者作者想要特別提示的信息。其實制作這樣的頁面效果非常的容…

React+Redux仿Web追書神器

引言 由于 10 月份做的 React Native 項目沒有使用到 Redux 等庫&#xff0c;寫了一段時間想深入學習 React&#xff0c;有個想法想做個 demo 練手下&#xff0c;那時候其實還沒想好要做哪一個類型的&#xff0c;也看了些動漫的&#xff0c;小說閱讀&#xff0c;聚合資源的開源…

【算法】LeetCode算法題-Maximum Subarray

這是悅樂書的第154次更新&#xff0c;第156篇原創 01 看題和準備 今天介紹的是LeetCode算法題中Easy級別的第13題&#xff08;順位題號是53&#xff09;。給定一個整數數組nums&#xff0c;找出一個最大和&#xff0c;此和是由數組中索引連續的元素組成&#xff0c;至少包含一個…

windows配置solr5.5.2(不通過tomcat,使用內置jetty)

一、windows下配置solr5.5.2(不通過tomcat,使用內置jetty) 第一步&#xff1a;安裝Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本&#xff0c;沒親測&#xff0c;solr6.0是只支持jdk1.8及以上的&#xff0c;下圖為啟動solr時的截圖&#xff1a; 如何在windows環境下配置jdk及驗證…

java起源英文_Abbreviation 英文詞組縮寫(來源:南陽理工大學ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】運行環境

一、CLR、CLI、CTS、CLS、BCL、FCL簡介CLI&#xff08;公共語言基礎&#xff09;CLI是微軟公司向ECMA提交的一份語言和數據格式規范&#xff0c;CLR是目前為止唯一一個公共語言基礎的實現版本。CLI包括了公共類型系統&#xff08;CTS&#xff09;、公共中間語言&#xff08;CIL…

如何完善自己的知識結構

★領域 &#xff08;本來想用“學科”這個詞&#xff0c;后來覺得“學科”的范疇還是偏小&#xff0c;就改用“領域”&#xff09;  按照傳統的習慣&#xff0c;通常會把知識歸類到不同的領域&#xff08;比如&#xff1a;文學、數學、計算機、烹調、等等&#xff09;。 ◇領…

MATLAB編程與應用系列-關于MATLAB編程入門教程的總體編寫安排

本系列教程來源于出版設計《基于MATLAB編程基礎與典型應用書籍》&#xff0c;如涉及版權問題&#xff0c;請聯系&#xff1a;156204968qq.com。 出版社&#xff1a;人民郵電出版社&#xff0c; 頁數&#xff1a;525。 本系列教程目前基于MATLABR2006a&#xff0c;可能對于更高級…

python語言特性-------python2.7教程學習【廖雪峰版】(一)

開始學習廖雪峰的py2.7教程&#xff1a; 2017年6月5日12:54:28 筆記&#xff1a; 廖雪峰python2.7教程1.用任何編程語言來開發程序&#xff0c;都是為了讓計算機干活。 2.Python是一種相當高級的語言。代碼少還不好&#xff1f;代碼少的代價是運行速度慢。3.用Python可以做什么…

java調c++代碼_Java中調用C++代碼的實現 | 學步園

JNI為 Java Native Interface 即Java本地接口&#xff0c;使用此種方式可以對C/C代碼進行調用&#xff0c;其在本質上是對C/C生成的動態庫進行調用而不是直接對C/C代碼進行調用Java代碼如下&#xff1a;public class TestJNI{//JNI在本質上是調用C/C的動態庫來實現的&#xff…

jeesite1.X 集成多數據源

2019獨角獸企業重金招聘Python工程師標準>>> 網上看了幾個例子&#xff0c;都是相同數據源的動態切換&#xff0c;如果不是同一種數據庫類型&#xff0c;分頁查詢就出問題。經過研究解決問題。 jeesite.properties配置多數數據源地址,這里以mysql5.7和sqlserver2008…

k8s HPA(HorizontalPodAutoscaler)-自動水平伸縮

Horizontal Pod Autoscaling in Kubernetes寫在前面我們平時部署web服務&#xff0c;當服務壓力大撐不住的時候&#xff0c;我們會加機器(加錢)&#xff1b;一般沒有上容器編排是手動加的&#xff0c;臨時加的機器&#xff0c;臨時部署的服務還要改Nginx的配置&#xff0c;最后…

jQuery 基金會和 Dojo 基金會合并:Open Web

統一基金會&#xff0c;服務開發人員&#xff0c;推動開放 Web 技術發展jQuery 基金會和 Dojo 基金會今天宣布計劃聯合&#xff0c;旨在建立最大&#xff0c;最多樣化和最全面的基金會&#xff0c;通過服務開發者&#xff0c;他們的項目&#xff0c;他們的社區來構建開放的 Web…

spark java 邏輯回歸_邏輯回歸分類技術分享,使用Java和Spark區分垃圾郵件

原標題&#xff1a;邏輯回歸分類技術分享&#xff0c;使用Java和Spark區分垃圾郵件由于最近的工作原因&#xff0c;小鳥很久沒給大家分享技術了。今天小鳥就給大家介紹一種比較火的機器學習算法&#xff0c;邏輯回歸分類算法。回歸是一種監督式學習的方式&#xff0c;與分類類似…