C#でFluentEmailを使って電子メールを送信する
C#でトランザクションメールを送信することは、多くのエンタープライズソフトウェアソリューションで共通のニーズです。 しかし、ティム・コーリー(Tim Corey)氏が"Sending Email in C# using FluentEmail"というビデオで説明しているように、このプロセスは難しくありません。 シンプルなテキストメッセージ、HTML メールの送信、または大量メールの処理をしたい場合には、FluentEmail は現代的な方法と SMTP プロトコルを利用してメール送信機能を簡単に実装する方法を提供します。
この記事では、FluentEmailを使用してC#でメールを送信する方法、SMTPサーバーのセットアップ、動的なHTMLメールメッセージの構築、メール送信プロセス全体の効果的なテストの方法を完全に学ぶために、Tim Coreyのビデオに従ってプロセスを歩んでいきます。
FluentEmailの紹介
C#でのメール送信は、System.Net.Mailのような古いツールに依存していましたが、.NET 5以降のバージョンでは、その多くが非推奨になりました。 そこで、最新の電子メールライブラリであるFluentEmailが、シンプルなメッセージからHTMLメールやインライン画像のような高度なコミュニケーションまで、ギャップを埋めるために登場しました。
ティム氏は、本番サーバーに接続せずに、簡単にメールを作成し、テンプレートを使用し、さらにテストすることが目標であると指摘する。
コンソール アプリケーションのセットアップ
1:04、TimはEmailDemoAppという名前の新しいコンソールアプリケーションを作成します。UIが必要ない場合は、static void Main(string[] args)、または単にpublic static void Mainで始めるシンプルさを強調しています。 スタート地点がすっきりしているため、メール送信プロセスのみに焦点を当てることができます。

アプリを作成した後、ティムはプロジェクトを従来 for .NET Frameworkから最新のアップグレードである.NET 5をターゲットに設定し、電子メールクライアントの最新プロトコルとの互換性を高めました。
パッケージマネージャーコンソールから FluentEmail をインストールする
次に、3:50 で Tim はパッケージマネージャコンソールを使用してパッケージ FluentEmail.Smtp をインストールし、C# でのメール送信に SMTP クライアントを利用可能にします。 これと並行して、TimはMailGunやSendGridのような追加の統合があることに言及しているが、SMTPは最も普遍的なオプションであり、ほとんどの電子メールクライアントやセットアップで動作する。

以下のコマンドを使って、手動でインストールしてください:
Install-Package FluentEmail.SmtpInstall-Package FluentEmail.Smtpティムは、ライブラリが動作するために必要なFluentEmail.Coreの依存関係も追加するようにします。
SMTPクライアントとサーバーの設定
6:10 で、Tim は新しい SmtpClient 構成を使用して SMTP クライアントを設定する手順を説明します。
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});この SMTP サーバーローカルホストはローカルテスト用であることを Tim は強調します。 プロダクションでは、実際の SMTP サーバーの詳細(例えば Gmail の SMTP エンドポイント)に接続し、セキュリティのためにアプリパスワードを使用する可能性があります。
彼は、より良いセキュリティと柔軟性のために、機密設定をappsettings.jsonのような設定ファイルに移動する必要があることを強調しています。
簡単な電子メールメッセージを送信する
11:59、TimはFluentEmailのメールAPIを使った簡単なメッセージの送信に移ります。 彼は、次のコード例でvar電子メールオブジェクトが作成されることを説明しています:
var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();この方法では、文字列の件名、文字列の電子メール、およびメッセージ本文を、メソッドチェイニングを使用して明確に指定します。 varメッセージ(Eメール)は、エラーチェックが可能な結果を保持します。
Tim はメールが tim@timco.com から送信されているように見える一方で、SMTP サーバーはログイン認証情報(例:Gmail のアプリパスワード)に基づいて認証することを指摘します。
ローカルディレクトリを使用した電子メールの表示
メールメッセージが送信されると、Timはローカルフォルダに.emlファイルとしてどのように表示されるかを示します。 Outlookやメモ帳で開くことができますが、既存の電子メールメッセージやバルクテストでは、最も使いやすいものではありません。

より簡単なテストのためにPapercut SMTPを使用する
17:03、Timはディレクトリへの保存から、軽量の偽SMTPサーバーであるPapercut SMTPの使用に切り替える。
彼は SMTP クライアントの設定を次のように変更します:
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;Papercutを使用すると、すべてのテストメールが即座にGUIに表示されます。 これにより、プレーンテキストとHTML本文のチェックがより簡単になり、実際のメールクライアントが異なるフォーマットをどのようにレンダリングするかをシミュレートできます。

Razorテンプレートを使ってHTMLメールを作成する
19:12でティムは、静的なプレーンテキストでは多くの実世界のケースで十分ではないことを指摘している。 よりダイナミックでリッチなHTMLメッセージのために、彼はFluentEmail.Razorパッケージをインストールしています:
Install-Package FluentEmail.RazorInstall-Package FluentEmail.Razor彼はプロジェクトの設定を更新します:
<PreserveCompilationContext>true</PreserveCompilationContext><PreserveCompilationContext>true</PreserveCompilationContext>Razor テンプレートが正しくコンパイルされるようにします。
Razorメールテンプレートの作成と使用
文字列ビルダー(var builder)とRazor構文を使用して、Timは動的な電子メールテンプレートを作成します:
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");そして、彼はこのテンプレートを次のコードを使って var リクエストにアタッチします:
await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();この技法は、テンプレートコンテンツに応じてプレーンテキストと HTML 本文といった異なる形式をサポートします。
複数の受信者と添付ファイルを処理する
Tim のデモでは完全に詳細には示されていないものの、FluentEmail は .To() 呼び出しを通じて複数の受信者を容易にサポートし、ファイル添付に MailMessage オブジェクトや旧式 .NET の MailMessage クラスのように添付オブジェクトを追加します。
新しい文字列ファイルパスまたはインライン画像用のコンテンツIDを使用して添付ファイルを作成することができます。
電子メール送信プロセスにおける例外処理
Timは、エラーを潔く処理すべきことを示唆しています。 例えば:
try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}これは特に SMTP プロトコルの問題が発生した場合にメール送信プロセス中の SMTP またはネットワーク関連の失敗を捕捉します。
要約と最終的な感想
27:56 頃に Tim は FluentEmail を使用すると、C# でのメール送信がシンプルな hello world スタイルのメッセージからプロフェッショナルでダイナミックな HTML メールまで簡単になると結論付けます。
また、ローカル開発と Azure Portal などのクラウドプラットフォーム間を移行する際には構成ファイル(appsettings.json など)を使用して SMTP サーバーの詳細と構成を柔軟に保つことの重要性を強調します。
メールを個別に送信する場合でも、大量に送信する場合でも、FluentEmailとPapercut SMTPの組み合わせは、多くのプログラミング言語やエコシステムと互換性のあるモダンで効率的なワークフローを提供します。
最終的な感想
Tim Corey の優れた ビデオ によれば、C# でのモダンなメール送信機能は基本的な SmtpClient クラスと MailMessage クラスの処理を超えて進化していることが明らかです。 FluentEmailの助けを借りて、開発者は新しいプロジェクトをすばやく作成し、SMTP接続を設定し、動的なメール本文を作成し、本番環境にデプロイする前にローカルですべてをテストすることができます。

