ASP.NETCoreで電子メールを送信する方法

多くの場合、アプリケーションを介して電子メールを送信する必要があります。MailKit NuGetパッケージを利用して、ASP.NETCoreで電子メールを送信できます。MailKitは、Windows、Linux、またはMacシステムで実行されている.NETまたは.NETCoreアプリケーションで使用できるオープンソースのメールクライアントライブラリです。この記事では、MailKitNuGetパッケージを使用してASP.NETCoreで電子メールを送信する方法について説明します。

この記事で提供されているコード例を使用するには、システムにVisual Studio2019がインストールされている必要があります。まだコピーをお持ちでない場合は、こちらからVisual Studio2019をダウンロードできます。 

ASP.NET CoreAPIプロジェクトを作成します

まず、VisualStudioでASP.NETCoreプロジェクトを作成しましょう。Visual Studio 2019がシステムにインストールされていると仮定して、以下に概説する手順に従って、VisualStudioで新しいASP.NETCoreプロジェクトを作成します。

  1. Visual StudioIDEを起動します。
  2. 「新しいプロジェクトの作成」をクリックします。
  3. [新しいプロジェクトの作成]ウィンドウで、表示されたテンプレートのリストから[ASP.NET CoreWebアプリケーション]を選択します。
  4. [次へ]をクリックします。
  5. 次に表示される[新しいプロジェクトの構成]ウィンドウで、新しいプロジェクトの名前と場所を指定します。
  6. [作成]をクリックします。
  7. [新しいASP.NetCore Webアプリケーションの作成]ウィンドウで、ランタイムとして.NET Coreを選択し、上部のドロップダウンリストからASP.NET Core 2.2(またはそれ以降)を選択します。ここではASP.NETCore3.0を使用します。
  8. プロジェクトテンプレートとして「API」を選択して、新しいASP.NET CoreAPIアプリケーションを作成します。 
  9. ここではこれらの機能を使用しないため、[Dockerサポートを有効にする]チェックボックスと[HTTPS用に構成する]チェックボックスがオフになっていることを確認してください。
  10. 認証も使用しないため、認証が「認証なし」に設定されていることを確認してください。
  11. [作成]をクリックします。 

これにより、VisualStudioで新しいASP.NETCoreAPIプロジェクトが作成されます。ソリューションエクスプローラーウィンドウでコントローラーソリューションフォルダーを選択し、[追加]-> [コントローラー...]をクリックして、DefaultControllerという名前の新しいコントローラーを作成します。このプロジェクトは、この記事の後続のセクションで使用します。

MailKitNuGetパッケージをインストールします

MailKitを使用するには、NuGetからMailKitパッケージをインストールする必要があります。これは、Visual Studio 2019 IDE内のNuGetパッケージマネージャーを使用するか、NuGetパッケージマネージャーコンソールで次のコマンドを実行することによって実行できます。

インストールパッケージNETCore.MailKit

また、コードに次の名前空間への参照を追加する必要があります。

MailKit.Net.Smtpを使用する;

MimeKitを使用する;

ASP.NETCoreで電子メール構成メタデータを指定する

次のコードスニペットは、appsettings.jsonファイルでメール構成の詳細を指定する方法を示しています。

"NotificationMetadata":{

    "送信者": "[email protected]"、

    "SmtpServer": "smtp.gmail.com"、

    "受信者":​​ "[email protected]"、

    「ポート」:465、

    "ユーザー名": "[email protected]"、

    「パスワード」:「ここにパスワードを指定してください」

  }

電子メール構成データを読み取るために、次のクラスを利用します。

パブリッククラスNotificationMetadata

    {{

        public string Sender {get; セットする; }

        public string Reciever {get; セットする; }

        パブリック文字列SmtpServer {get; セットする; }

        public int Port {get; セットする; }

        public string UserName {get; セットする; }

        パブリック文字列パスワード{取得; セットする; }

    }

メール設定データをappsettings.jsonファイルからNotificationMetadataクラスのインスタンスに読み込む方法は次のとおりです。

public void ConfigureServices(IServiceCollection services)

{{

     var notifyMetadata =

     Configuration.GetSection( "NotificationMetadata")。

     取得する();

     services.AddSingleton(notificationMetadata);

     services.AddControllers();

}

ASP.NETCoreでEmailMessageクラスのインスタンスを作成します

次のコードを使用して、EmailMessageという名前の新しいクラスを作成します。

パブリッククラスEmailMessage

    {{

        public MailboxAddress Sender {get; セットする; }

        public MailboxAddress Reciever {get; セットする; }

        パブリック文字列Subject {get; セットする; }

        パブリック文字列コンテンツ{取得; セットする; }

    }

ASP.NETCoreでMimeMessageクラスのインスタンスを作成します

次のメソッドは、カスタムクラスEmailMessageのインスタンスからMimeMessageインスタンスを作成する方法を示しています。

プライベートMimeMessageCreateMimeMessageFromEmailMessage(EmailMessageメッセージ)

{{

     var mimeMessage = new MimeMessage();

     mimeMessage.From.Add(message.Sender);

     mimeMessage.To.Add(message.Reciever);

     mimeMessage.Subject = message.Subject;

     mimeMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)

     {テキスト= message.Content};

     mimeMessageを返します。

}

ASP.NETCoreのMailKitを使用して同期的に電子メールを送信する

電子メールを送信するには、MailKit.Net.Smtp名前空間に関連するSmtpClientクラスを利用する必要があります。次のコードスニペットは、これを行う方法を示しています。

using(SmtpClient smtpClient = new SmtpClient())

{{

  smtpClient.Connect(_notificationMetadata.SmtpServer、

  _notificationMetadata.Port、true);

  smtpClient.Authenticate(_notificationMetadata.UserName、

  _notificationMetadata.Password);

  smtpClient.Send(mimeMessage);

  smtpClient.Disconnect(true);

}

便宜上、DefaultControllerクラスのGetアクションメソッドの完全なコードを次に示します。

パブリック文字列Get()

{{

EmailMessageメッセージ=新しいEmailMessage();

message.Sender = new MailboxAddress( "Self"、_ notificationMetadata.Sender);

message.Reciever = new MailboxAddress( "Self"、_ notificationMetadata.Reciever);

message.Subject = "ようこそ";

message.Content = "Hello World!";

var mimeMessage = CreateEmailMessage(message);

using(SmtpClient smtpClient = new SmtpClient())

 {{

    smtpClient.Connect(_notificationMetadata.SmtpServer、

    _notificationMetadata.Port、true);

    smtpClient.Authenticate(_notificationMetadata.UserName、

    _notificationMetadata.Password);

    smtpClient.Send(mimeMessage);

    smtpClient.Disconnect(true);

  }

 「メールは正常に送信されました」を返します。

}

ASP.NETCoreのMailKitを使用して非同期で電子メールを送信する

次のコードスニペットは、電子メールを同期的に送信するために作成したコードの非同期バージョンを示しています。

using(SmtpClient smtpClient = new SmtpClient())

 {{

      smtpClient.ConnectAsync(_notificationMetadata.SmtpServer、

      _notificationMetadata.Port、true);

      smtpClient.AuthenticateAsync(_notificationMetadata.UserName、

      _notificationMetadata.Password);

      smtpClient.SendAsync(mimeMessage);を待ちます。

      smtpClient.DisconnectAsync(true);を待ちます。

 }

最後に、MailKitでは、テンプレートを使用してメールを送信したり、添付ファイルのあるメールを送信したりすることもできます。MailKitの追加機能については、今後の記事で説明します。