ホームページ  >  記事  >  バックエンド開発  >  .net はどのように電子メールを送信しますか?

.net はどのように電子メールを送信しますか?

零下一度
零下一度オリジナル
2017-06-23 16:14:582487ブラウズ

ドキュメント ディレクトリ

  • 概要

  • 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 には SmtpClient と MailMessage が含まれていないため、.net core では使用できません)。

ISmtpEmailSender

IEmailSender を拡張し、BuildClient メソッドを追加して SmtpClient を作成する ISmtpEmailSender もあり、SmtpClient を直接使用できます (.net core には SmtpClient が含まれていないため、.net core では使用できません)および 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 サーバーが SSL 接続の使用を必要とするか (true)、否か (false) を示します (デフォルトは false)。

  • Abp.Net.Mail.Smtp.UseDefaultCredentials: True の場合、指定されたユーザーとパスワードの代わりにデフォルトの資格情報を使用します (デフォルトは true)。

統合された MailKit

.net コアは標準の System.Net.Mail.SmtpClient をサポートしていないため、幸いなことに、メールを送信するにはサードパーティのプロバイダーが必要です。デフォルトの Smtpclient には MailKit が適しています。代わりに、Microsoft はその使用を推奨しています。

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>();}//...}

(ReplaceService の拡張メソッドがこの名前空間で定義されているため、「using Abp.Configuration.Startup;」ステートメントを忘れずに追加してください)。

以上が.net はどのように電子メールを送信しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。