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