首頁  >  文章  >  後端開發  >  .net是怎麼發送郵件的?

.net是怎麼發送郵件的?

零下一度
零下一度原創
2017-06-23 16:14:582434瀏覽

文件目錄

 

  • 簡介

  • #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 的擴充方法定義在這個命名空間裡)。 ###

    以上是.net是怎麼發送郵件的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn