日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件

發(fā)布時間:2024/10/14 asp.net 101 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

????在實際的項目開發(fā)中,我們會遇到許多需要通過程序發(fā)送郵件的場景,比如異常報警、消息、進度通知等等。一般情況下我們使用原生的SmtpClient類庫居多,它能滿足我們絕大多數(shù)場景。但是使用起來不夠簡潔,許多場景需要我們自行封裝方法去實現(xiàn),而且代碼量非??捎^。慶幸的是,我們有一款非常棒的組件,能滿足我們絕大多數(shù)應用場景,而且使用簡單功能強大,就是我們今天要說的FluentEmail,這也是我們實際在項目中正在使用的郵件發(fā)送組件。如果你們在.Net Core中有發(fā)送郵件的需求,也推薦去嘗試一下。

FluentEmail

??? FluentEmail是一款在GitHub上開源免費的支持.Net和.Net Core郵件發(fā)送組件,目前已有1K多的Star,而且近兩年隨著.Net Core的日益成熟,它的Star增長趨勢還是非常迅猛的。它在GitHub地址是https://github.com/lukencode/FluentEmail,它的功能非常強大而且非常實用,支持Razor的郵件模板和支持使用SendGrid,MailGun,SMTP發(fā)送郵件,而且使用也非常簡單。

Nuget組件

FluentEmail功能強大,而且對不同場景的支持都有獨立的Nuget包,這種低耦合的拆分不僅使得依賴非常清晰,而且避免引入不需要的代碼,具體功能包含在以下的組件包中

  • FluentEmail.Core?- 基礎核心包,包含了基礎的模型定義和默認的設置,而且以下的引用包都包含了這個核心包。

  • FluentEmail.Smtp?- 使用SMTP服務發(fā)送郵件的程序包。

  • FluentEmail.Razor?- 通過Razor模板生成郵件發(fā)送內(nèi)容。

  • FluentEmail.Mailgun?- 使用Mailgun的Rest接口發(fā)送郵件。

  • FluentEmail.SendGrid?- 使用SendGrid接口發(fā)送郵件。

  • FluentEmail.Mailtrap?- 發(fā)送郵件Mailtrap, 使用的是FluentEmail.Smtp包進行發(fā)送.

  • FluentEmail.MailKit?- 使用MailKit郵件庫發(fā)送郵件。

普通郵件方式

接下來我們就演示一下如何使用FluentEmail發(fā)送郵件,由于我們實際業(yè)務中大多數(shù)都使用的SMTP的方式發(fā)送郵件,所以我們就以此為做演示,首先我們在項目中引入FluentEmail.Smtp包,目前最新版本為2.8.0

<PackageReference Include="FluentEmail.Smtp" Version="2.8.0" />

接下來我們就可以愉快的寫代碼了,它的編碼使用方式非常簡單而且非常簡潔,主要通過鏈式編程的方式

//如果使用smtp服務發(fā)送郵件必須要設置smtp服務信息SmtpClient smtp = new SmtpClient{ //smtp服務器地址(我這里以126郵箱為例,可以依據(jù)具體你使用的郵箱設置) Host = "smtp.126.com", UseDefaultCredentials = true, DeliveryMethod = SmtpDeliveryMethod.Network, //這里輸入你在發(fā)送smtp服務器的用戶名和密碼 Credentials = new NetworkCredential("郵箱用戶名", "郵箱密碼")};//設置默認發(fā)送信息Email.DefaultSender = new SmtpSender(smtp);var email = Email //發(fā)送人 .From("zhangsan@126.com") //收件人 .To("lisi@qq.com") //抄送人 .CC("admin@126.com") //郵件標題 .Subject("郵件標題") //郵件內(nèi)容 .Body("郵件內(nèi)容");//依據(jù)發(fā)送結(jié)果判斷是否發(fā)送成功var result = email.Send();//或使用異步的方式發(fā)送//await email.SendAsync();if (result.Successful){ //發(fā)送成功邏輯}else{ //發(fā)送失敗可以通過result.ErrorMessages查看失敗原因}

如果你發(fā)送的內(nèi)容中包含html格式的內(nèi)容可以使用如下方式

var email = Email //發(fā)送人 .From("zhangsan@126.com") //收件人 .To("lisi@qq.com") //抄送人 .CC("admin@126.com") //郵件標題 .Subject("郵件標題") //只需要額外設置第二個參數(shù)為true即可 .Body("

.NET大法好

是的,這一點毛病都沒有

",true);//發(fā)送var result = email.Send();

這個我們通過點擊查看Body的方法聲明即可得知第二個參數(shù)是用來表示內(nèi)容是否為html格式,默認為false

IFluentEmail Body (string body, bool isHtml = false);

如果郵件的收件人為多個郵箱地址的話,可以采用To方法的另一個重載方法可以接受List

var email = Email //發(fā)送人 .From("zhangsan@126.com") //郵件標題 .Subject("郵件標題") //郵件內(nèi)容 .Body("

.NET大法好

是的,一點毛病都沒有

",true);//構(gòu)建多個接收人郵箱string toUserStr = "oldwang@126.com;xiaoming@163.com;xiaoli@qq.com";List toUsers = toUserStr.Split(";") .Select(i => new FluentEmail.Core.Models.Address { EmailAddress = i }).ToList();//支持傳入Address集合email.To(toUsers)//抄送人集合.CC(toUsers);//發(fā)送var result = email.Send();

如果我們需要在發(fā)送的郵件中添加一個附件的話,可以使用Attache方法添加附件

var email = Email //發(fā)送人 .From("zhangsan@qq.com") //收件人 .To("lisi@126.com") //抄送人 .CC("admin@126.com") //郵件標題 .Subject("關(guān)于.Net Core怎么樣") //郵件內(nèi)容 .Body("

.NET Core

.Net Core很優(yōu)秀嗎?是的,一點毛病都沒有!!!

",true);//構(gòu)建附件var stream = new MemoryStream();var sw = new StreamWriter(stream);sw.WriteLine("您好,這是文本里的內(nèi)容");sw.Flush();stream.Seek(0, SeekOrigin.Begin);var attachment = new FluentEmail.Core.Models.Attachment{ Data = stream, ContentType = "text/plain", Filename = "Hello.txt"};//添加附件email.Attach(attachment);var result = email.Send();

如果需要添加多個附件的話Attach方法支持傳入Attachment集合

//構(gòu)建附件var stream = new MemoryStream();var sw = new StreamWriter(stream);sw.WriteLine("您好,這是文本里的內(nèi)容");sw.Flush();stream.Seek(0, SeekOrigin.Begin);//附件1var attachment = new FluentEmail.Core.Models.Attachment{ Data = stream, ContentType = "text/plain", Filename = "Hello.txt"};//附件2var attachment2 = new FluentEmail.Core.Models.Attachment{ Data = File.OpenRead(@"D:\test.txt"), ContentType = "text/plain", Filename = "test.txt"};//添加附件email.Attach(new List { attachment, attachment2 });var result = email.Send();

使用Razor模板

????上面的內(nèi)容我們介紹了使用FluentEmail使用常規(guī)的方式發(fā)送郵件,但是有時候我們需要發(fā)送一些內(nèi)容是動態(tài)的或者發(fā)送一些樣式比較復雜html網(wǎng)頁內(nèi)容。通常我們使用原生的SmptClient的時候都是通過拼接html代碼方式,但是這種方式相對來說比較費時費力,對于.Net程序員來說Razor引擎是我們構(gòu)建動態(tài)html頁面最熟悉的方式,而FluentEmail正是為我們提供了Razor模板的支持。首先,我們在之前的基礎上引入FluentEmail.Razor模板支持組件

<PackageReference Include="FluentEmail.Razor" Version="2.8.0" />

由于ASP.NET Core2.2開始默認是使用的視圖編譯功能,視圖會編譯成 項目名稱.Views.dll,但是FluentEmail.Razor又需要讀取視圖文件的內(nèi)容,所以要在csproj文件中添加以下內(nèi)容

<MvcRazorExcludeRefAssembliesFromPublish>trueMvcRazorExcludeRefAssembliesFromPublish>

然后我們就可以使用Razor模板生成郵件內(nèi)容,具體的使用方式

//聲明使用razor的方式Email.DefaultRenderer = new RazorRenderer();//razor內(nèi)容var template = "你好@Model.Name先生, 請核實您的電話號碼是否為@Model.Phone";var email = Email .From("lisi@126.com") .To("zhangsan@qq.com") .Subject("手機號核實") //傳遞自定義POCO類 //.UsingTemplate(template, new UserInfo { Name = "張三", Phone嗎 = "100110119120" }) //或傳遞匿名對象 .UsingTemplate(template, new { Name = "張三", Phone嗎 = "100110119120" });var result = await email.SendAsync();

當然它支持的方式不僅僅只是Razor字符串,還可以傳遞Razor視圖文件

var email = Email .From("lisi@126.com") .To("zhangsan@qq.com") .Subject("手機號核實") //傳遞自定義POCO類 //.UsingTemplateFromFile($"{Directory.GetCurrentDirectory()}/template.cshtml", // new UserInfo { Name = "張三", Phone嗎 = "100110119120" }); //第一個參數(shù)為視圖文件位置,第二個參數(shù)為模型對象 .UsingTemplateFromFile($"{Directory.GetCurrentDirectory()}/template.cshtml", new { Name = "張三", Phone嗎 = "100110119120" });var result = await email.SendAsync();

FluentEmail.Razor之所以能夠支持強大的Razor模板引擎,主要是得益于它內(nèi)部集成了RazorLight,這是一款非常強大的Razor引擎,可以將Razor模板字符串或者Razor視圖文件解析成具體的字符串結(jié)果,具體詳情可參閱RazorLight官方GitHub地址https://github.com/toddams/RazorLight,目前正式版并不支持.Net Core,可以選擇下載beta版本

Install-Package RazorLight -Version 2.0.0-beta10

它的使用方式也非常簡單

//razor字符串的方式var engine = new RazorLightEngineBuilder() .UseEmbeddedResourcesProject(typeof(Program)) .UseMemoryCachingProvider() .Build();string template = "Hello, @Model.Name. Welcome to RazorLight repository";ViewModel model = new ViewModel {Name = "John Doe"};//result就是解析后的字符串string result = await engine.CompileRenderStringAsync("templateKey", template, model);

或使用razor視圖文件的方式

var engine = new RazorLightEngineBuilder() .UseFileSystemProject("${Directory.GetCurrentDirectory()}") .UseMemoryCachingProvider() .Build();var model = new {Name = "John Doe"};string result = await engine.CompileRenderAsync("template.cshtml", model);

當然它支持的方式不僅僅只有這兩種,無論是使用便捷程度還是功能上都非常的強大,有興趣的同學可以自行查閱RazorLight的GitHub地址,講解的還是非常詳細的。在這里就不在過多的討論關(guān)于RazorLight的使用方式了。
????關(guān)于發(fā)送的郵件內(nèi)容,這里有一個非常重要的點需要友情提示一下公共郵箱運營商比如網(wǎng)易或騰訊,有的可能需要手動開啟SMTP服務,具體如何設置可以參考https://blog.csdn.net/c13_tianming/article/details/47660635一文。還有一點也比較重要如果你使用公共郵箱運營商的郵箱那么他們會對郵件的標題和內(nèi)容限制比較大,可能出現(xiàn)的問題比較多,而且開啟Smtp服務需要發(fā)送短信認證才能開啟。好在大部分公司都有自己的郵件系統(tǒng),在實際發(fā)送郵件的過程中可能不會存在這么多的問題。

結(jié)合依賴注入使用

在使用.Net Core的實際開發(fā)中,依賴注入已經(jīng)成為了必不可少的開發(fā)模式。如果你正在使用.Net Core開發(fā)項目,但是你還沒有接觸依賴注入,那么需要你先自行反省一下。FluentEmail作為一款與時俱進的組件,也可以結(jié)合依賴注入使用,使用這種方式我們可以在注冊的時候統(tǒng)一的配置一些默認的設置。這波操作就不需要額外引入一些別的包了,如果你需要使用Smtp就引入FluentEmail.Smtp包,如果你需要使用Razor模板就引入FluentEmail.Razor包,關(guān)于注入的這一部分的功能其實是包含在FluentEmail.Core包里面的

public void ConfigureServices(IServiceCollection services){ SmtpClient smtp = new SmtpClient { //smtp服務器地址(我這里以126郵箱為例,可以依據(jù)具體你使用的郵箱設置) Host = "smtp.qq.com", UseDefaultCredentials = true, DeliveryMethod = SmtpDeliveryMethod.Network, //這里輸入你在發(fā)送smtp服務器的用戶名和密碼 Credentials = new NetworkCredential("zhangsan@qq.com", "zhangsan") }; //注入的時候可以添加一些默認的設置 services //設置默認發(fā)送用戶 .AddFluentEmail("zhangsan@qq.com") //添加razor模板支持 //.AddRazorRenderer($"{Directory.GetCurrentDirectory()}/Views") .AddRazorRenderer() //配置默認的smtp服務信息 .AddSmtpSender(smtp);}

在需要發(fā)送郵件的類中直接注入IFluentEmail,不必驚慌咱們上面使用的Email這個類其實就是實現(xiàn)了IFluentEmail這個接口,所以使用方式上是完全一致的

public async TaskSendEmail([FromServices]IFluentEmail email){ var result = await email//發(fā)送人 //發(fā)送人 .From("zhangsan@126.com") //收件人 .To("lisi@qq.com") //抄送人 .CC("admin@126.com") //郵件標題 .Subject("郵件標題") //郵件內(nèi)容 .Body("郵件內(nèi)容").SendAsync(); return View();}

如果你需要發(fā)送Razor視圖模板相關(guān)的內(nèi)容,也還是那個熟悉的配方那個熟悉的味道,沒有任何的不同,只是省略了一些我們在注冊的時候添加的一些默認配置

public async TaskSendEmail([FromServices]IFluentEmail email){ var template = "你好@Model.Name先生, 請核實您的電話號碼是否為@Model.Phone"; var result = await email//發(fā)送人 .From("lisi@126.com") .To("zhangsan@qq.com") .Subject("手機號核實") //傳遞自定義POCO類 //.UsingTemplate(template, new UserInfo { Name = "張三", Phone嗎 = "100110119120" }) //或傳遞匿名對象 .UsingTemplate(template, new { Name = "張三", Phone嗎 = "100110119120" }) .SendAsync(); return View();}

總結(jié)

????關(guān)于FluentEmail的基本使用方式我們就介紹到這里,我個人感覺它自身的功能還是非常強大的,而且使用起來非常的簡單。說實話在之前我沒接觸到FluentEmail之前,我經(jīng)常在園子里看到其他語言集成發(fā)送郵件的組件,確實非常強大,比如在springboot中集成spring-boot-starter-mail真的是非常的便捷。后來無意中接觸到了FluentEmail心里還是蠻欣慰的,一是它強大的功能和易用性,其次是可以去結(jié)合.Net Core進一步優(yōu)化了它的使用方式,至少在.Net和.Net Core中我們也擁有一款非常便捷的郵件發(fā)送組件。FluentEmail的作者也呼吁更多的開發(fā)者能夠了解并參與到FluentEmail開發(fā)和實踐中去,最后再次貼上它的GitHub地址https://github.com/lukencode/FluentEmail,有興趣的可以去了解學習一下順便別忘了給個Star。

?歡迎掃碼關(guān)注我的公眾號?

總結(jié)

以上是生活随笔為你收集整理的flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线中文字幕网站 | 国产伦精品一区二区三区高清 | 国产日韩精品久久 | 久久亚洲精少妇毛片午夜无码 | 国产视频精品一区二区三区 | 亚洲aⅴ网站 | 亚洲人成电影网站 | 少妇激情视频 | 综合五月婷 | 欧美jizz欧美性大全 | 污网站在线免费 | 国产精品国产三级国产普通话蜜臀 | 后进极品白嫩翘臀在线视频 | 日日摸天天添天天添破 | www奇米影视com | 国产a精品| 好吊色一区二区 | 成人一区二区在线观看 | 涩五月婷婷 | 成人片黄网站色大片免费毛片 | 日本爱爱网址 | 91超碰人人 | 黄色香蕉软件 | 海角国产乱辈乱精品视频 | 99er在线观看| 久久久久久久女国产乱让韩 | 91拔萝卜视频| 成人免费在线小视频 | 久久欧美视频 | 黄色aaaa| 欧美丰满熟妇xxxx | 日本黄色录像片 | 天堂在线视频 | 福利久久久 | 欧美色精品在线 | 高清在线一区二区三区 | 成人午夜av | 国产成人愉拍精品久久 | 无码成人精品区一级毛片 | 国产在线视频网址 | 九一在线视频 | 日韩欧美二区三区 | 上床视频在线观看 | 日韩成人av在线播放 | 亚洲男女在线 | 亚洲午夜一区二区三区 | 手机看片日韩在线 | 干欧美少妇 | 美女色av| 亚洲欧美视频在线 | 欧美日韩国产精品一区 | 色婷婷久久 | 亚洲精品天堂在线观看 | 蜜臀av无码一区二区三区 | 无码国产色欲xxxxx视频 | 欧美网 | 国产剧情av在线播放 | www.17c.com喷水少妇 | 性猛交富婆╳xxx乱大交麻豆 | 国产私密视频 | 欧美激情视频二区 | 中文永久免费观看 | 91成品人影院 | 亚洲老女人视频 | 欧美放荡性医生videos | 亚洲五码在线 | 深夜啪啪| 午夜影视福利 | 国产午夜一区 | 青青草视频免费观看 | xxxx.国产 | 91久久精品一区二区别 | 加勒比一区二区三区 | avtt中文字幕 | 亚州欧美在线 | 国产乱论视频 | 香蕉av一区二区三区 | 成人黄色片免费看 | 国产粉嫩在线 | 国产成人无码网站 | 亚洲熟女乱色综合亚洲av | 在线视频黄 | 色婷婷国产精品综合在线观看 | 91最新入口 | 亚洲免费专区 | 精品久久久久中文慕人妻 | 国产精品久久av无码一区二区 | 一区二区av | 国产三级自拍视频 | 逼特逼在线视频 | 国产精品成人一区二区三区电影毛片 | 成人在线h| 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 噜噜色图| 久久久久三级 | 91夫妻在线 | 午夜8888 | 欧美成人a∨高清免费观看 国产精品999视频 | 九热精品视频 |