.NET實現郵件發送的代碼詳解

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了ASP.NET Core發送郵件的方法,告訴大家如何在ASP.NET Core中發送郵件,具有一定的參考價值,感興趣的小夥伴們可以參考一下

前言

我們知道目前 .NET Core 還不支援 SMTP 協議,當我麼在使用到發送郵件功能的時候,需要藉助於一些第三方組件來達到目的,今天給大家介紹兩款開源的郵件發送組件,它們分別是MailKit 和FluentEmail ,下面我對它們分別進行介紹。

MailKit

在 ASP.NET Core 中,可以使用 MailKit 來發送郵件,它支援跨平台,並且支援 IMAP, POP3, SMTP 等協議。

你可以使用下面的方式安裝:

Install-Package MailKit

下面是一個簡單的發送郵件的例子:

var message = new MimeMessage ();message.From.Add (new MailboxAddress ("Joey Tribbiani", "joey@friends.com"));message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler@friends.com"));message.Subject = "星期天去哪裡玩?";message.Body = new TextPart ("plain") { Text = "我想去故宮玩,如何" };using (var client = new SmtpClient ()) { // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS) client.ServerCertificateValidationCallback = (s,c,h,e) => true; client.Connect ("smtp.friends.com", 587, false); // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove ("XOAUTH2"); // Note: only needed if the SMTP server requires authentication client.Authenticate ("joey", "password"); client.Send (message); client.Disconnect (true);}

如果你要發送的 Body 內容是 HTML 的話,你可以使用下面這種:

var bodyBuilder = new BodyBuilder();bodyBuilder.HtmlBody = @"<b>This is bold and this is <i>italic</i></b>";message.Body = bodyBuilder.ToMessageBody();

Fluent Email

Fluent Email 這個也是一個開源項目,利用它,你可以使用 Razor 模板來發送郵件,並且可以整合一些第三方的郵件發送程式比如 Mailgun等,但是此包只在 .NET 4.6 下才支援 SMTP 。你可以使用如下命令來安裝它:

Install-Package FluentEmail.Razor

你可以使用最基本的方式來發送郵件,很簡單如下:

//注意: .NET 4.6 才支援Email.DefaultSender = new SmtpSender();var email = Email .From("foo@email.com") .To("bar@email.com", "bob") .Subject("星期天去哪裡玩?") .Body("我想去故宮玩,如何?");await email.SendAsync();

或者,你可以使用 Razor 模板來發送:

//注意: .NET 4.6 才支援Email.DefaultSender = new SmtpSender();// Using Razor templating packageEmail.DefaultRenderer = new RazorRenderer();var template = "Dear @Model.Name, You are totally @Model.Compliment.";var email = Email .From("bob@hotmail.com") .To("somedude@gmail.com") .Subject("woo nuget") .UsingTemplate(template, new { Name = "Luke", Compliment = "Awesome" });

Email.DefaultRenderer 是告訴FulentEmail 使用哪個渲染器(你也可以自己實現一個自己的),然後提供了一個 template 模板,內容為 Razor 語法的模板字串,然後使用UsingTemplate 來進行渲染呈現。

磁碟上的 cshtml 模板

加入你的郵件 Razor 模板檔案比較大,用字串來表示的話不太優雅,那麼你可以把模板檔案放到磁碟上,然後使用如下方式來載入:

//注意: .NET 4.6 才支援Email.DefaultSender = new SmtpSender();Email.DefaultRenderer = new RazorRenderer();var email = Email .From("foo@email.com") .To("bar@email.com", "bob") .Subject("星期天去哪裡玩?") .UsingTemplateFromFile($"{Directory.GetCurrentDirectory}/EmailTemplage.cshtml", new {Name ="Luke"})

使用 Mailgun 發送郵件

可能有一些人對 Mailgun 還不太清楚,Mailgun 是國外的一個郵件服務公司,比如著名的 Github 的郵件服務就託管在它的上面,免費的 Maingun 賬戶每個月可以發送 10000 封郵件,對於很多中小網站足夠用了。

當使用 Mailgun 來發送郵件的時候,你首先需要去註冊一個帳號,然後可以利用 Mailgun 提供的 Rest API 來管理髮送或者接收的郵件。使用 FluentEmail 整合的 Mailgun只需要添加如下包:

Install-Package FluentEmail.Mailgun

註冊完 Mailgun 之後會給你分配一個 API Key 和一個次層網域,在程式種,你需要如下配置:

// 同時支援 .NET Core 和 .NET Frameworkvar sender = new MailgunSender( "sandboxcf5f41bbf2f84f15a386c60e253b5fe8.mailgun.org", // Mailgun 次層網域 "key-8d32c046d7f14ada8d5ba8253e3e30df" // Mailgun API Key);Email.DefaultSender = sender;var email = Email .From("foo@email.com") .To("bar@email.com", "bob") .Subject("星期天去哪裡玩?") .Body("我想去故宮玩,如何?");await email.SendAsync();

總結

通過上述樣本我們可以看出 MailKit 和 FluentEmail 各有優缺點。MailKit 的優點是支援的協議比較多,而且是跨平台的,但是缺點是沒有提供對 Razor的支援,並且如果使用 Mailgun 的話需要自己進行整合。 那麼 FlentEmail 的優點是提供了 Razor 模板的支援並且封裝了 Mailgun, 缺點是 SMTP 協議還沒有提供對 .NET Core 的支援。

綜上所述,如果你使用 Mailgun 來發送郵件的話,那麼 FluentEmail 是你應該選擇的,如果你想使用 SMTP 協議連結到自己的郵件伺服器來發送郵件的話,那麼你應該用 MailKit。

【相關推薦】

1. ASP免費視頻教程

2. ASP教程

3. 李炎恢ASP基礎視頻教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.