.net是怎麼發送郵件的?

來源:互聯網
上載者:User
文檔目錄

  • 簡介

  • IEmailSender

    • ISmtpEmailSender

    • NullEmailSender

  • 配置

  • 整合 MailKit

    • 安裝

    • 整合

    • 用法

    • 定製

簡介

發送郵件是一個很常用的任務,幾乎每個應用都需要。Abp提供了一個基本的架構,用於簡單地發送郵件並為它分離出了郵件服務的配置。

IEmailSender

它是一個你無需瞭解它的細節就能簡單地用來發送郵件的服務,用法如下所示:

public class TaskManager : IDomainService{private readonly IEmailSender _emailSender;    public TaskManager(IEmailSender emailSender)    {        _emailSender = emailSender;    }public void Assign(Task task, Person person)    {//Assign task to the persontask.AssignedTo = person;//Send a notification email        _emailSender.Send(            to: person.EmailAddress,            subject: "You have a new task!",            body: $"A new task is assigned for you: <b>{task.Title}</b>",            isBodyHtml: true);}}

我們簡單地注入IEmailSender,並使用Send方法,該方法有幾個重載版本,其中也有能接受MailMessage對象的重載(.net core裡不能用,因為.net core不包含SmtpClient和MailMessage)。

ISmtpEmailSender

同樣也有一個ISmtpEmailSender,它擴充了IEmailSender,添加了BuildClient方法,用來建立一個SmtpClient,然後可以直接使用SmtpClient(.net core裡不能用,因為.net core不包含SmtpClient和MailMessage)。大部分情況下使用ISmtpEmailSender就已足夠。

NullEmailSender

NullEmailSender是IEmailSender 的Null對象設計模式的實現,可用在單元測試和屬性依賴注入中。

配置

郵件發送使用了設定管理系統來讀取郵件發送的配置,所有設定的名稱都以常量的形式定義在Abp.Net.Mail.EmailSettingNames類裡。下列是它的值和描述:

  • Abp.Net.Mail.DefaultFromAddress:預設的郵件寄件者的地址(如上面的樣本)。

  • Abp.Net.Mail.DefaultFromDisplayName:預設的郵件寄件者顯示的名稱(如上面的樣本)。

  • Abp.Net.Mail.Smtp.Host: SMTP伺服器的IP或網域名稱(預設為127.0.0.1)。

  • Abp.Net.Mail.Smtp.Port: SMTP伺服器的連接埠(預設為25)。

  • Abp.Net.Mail.Smtp.UserName: 當SMTP伺服器要求認證時,需要提供的使用者名稱。

  • Abp.Net.Mail.Smtp.Password: 當SMTP伺服器要求認證時,需要提供的密碼。

  • Abp.Net.Mail.Smtp.Domain: 當SMTP伺服器要求認證時,需要提供的網域名稱。

  • Abp.Net.Mail.Smtp.EnableSsl: 表明一個SMTP伺服器是(true)否(false)需要使用SSL串連(預設為false)。

  • Abp.Net.Mail.Smtp.UseDefaultCredentials: 為True時使用預設的憑證代替提供的使用者和密碼(預設為true)。

整合 MailKit

由於.net core不支援標準的System.Net.Mail.SmtpClient,所以我們需要第三方供應商來發送郵件,幸運地是,MailKit 是預設的Smtpclient的一個很好的代替,而且微軟也建議使用它。

Abp.MailKit 包優雅地整合到了Abp的郵件發送系統裡,所以,你仍可像前面的方式通過MailKit使用IEmailSender。

安裝

首先,安裝Abp.MailKit 包到你的項目:

Install-Package Abp.MailKit

整合

添加AbpMailKitModule 依賴到你的模組:

[DependsOn(typeof(AbpMailKitModule))]public class MyProjectModule : AbpModule{//...}

用法

你可以像前面描述的那樣使用IEmailSender,因為Abp.MailKit包為它註冊了MailKit的實現。也使用上面定義的配置。

定製

在建立MailKit的SmtpClient時,你可能會有額外的配置或自己的定製,此時,你可以用你自己的實現替換IMailKitSmtpBuilder 介面的註冊,不過可以通過繼承DefaultMailKitSmtpBuilder 更簡單。比如,你想為所有的SSL串連提供一個憑證,這種情況下,你可以重寫ConfigureClient方法,如下所示:

public class MyMailKitSmtpBuilder : DefaultMailKitSmtpBuilder{public MyMailKitSmtpBuilder(ISmtpEmailSenderConfiguration smtpEmailSenderConfiguration)         : base(smtpEmailSenderConfiguration)    {    }protected override void ConfigureClient(SmtpClient client)    {client.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;        base.ConfigureClient(client);    }}

然後在你的模組的PreInitialize方法中用你上面的實現替換IMailKitStmpBuilder介面的實現:

[DependsOn(typeof(AbpMailKitModule))]public class MyProjectModule : AbpModule{public override void PreInitialize()    {        Configuration.ReplaceService<IMailKitSmtpBuilder, MyMailKitSmtpBuilder>();}//...}

(記得添加"using Abp.Configuration.Startup;"聲明,因為ReplaceService 的擴充方法定義在這個命名空間裡)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.