C#でFluentEmailを使って電子メールを送信する
C#でトランザクションメールを送信することは、多くのエンタープライズソフトウェアソリューションで共通のニーズです。 しかし、ティム・コーリー(Tim Corey)氏が"Sending Email in C# using FluentEmail"というビデオで説明しているように、このプロセスは難しくありません。 FluentEmailは、シンプルなテキストメッセージの送信、HTMLメールの送信、バルクメールの処理のいずれにおいても、最新のメソッドと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"
});Timは、このsmtpサーバーlocalhostはローカルテスト用であることを強調しています。 本番では、GmailのSMTPエンドポイントなど、実際の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()呼び出しによって複数の受信者を簡単にサポートし、古い.NETのmailmessageオブジェクトや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あたりでティムは、FluentEmailを使えば、C#でメールを送るのが簡単になる-hello worldスタイルのシンプルなメッセージから、プロフェッショナルでダイナミックなhtmlメールの送信まで-と締めくくっている。
また、特にローカル開発とAzure Portalのようなクラウドプラットフォームを行き来する際には、appsettings.jsonのような設定ファイルを使用して、smtpサーバーの詳細と設定を柔軟に保つことの重要性を強調しています。
メールを個別に送信する場合でも、大量に送信する場合でも、FluentEmailとPapercut SMTPの組み合わせは、多くのプログラミング言語やエコシステムと互換性のあるモダンで効率的なワークフローを提供します。
最終的な感想
Tim Corey の素晴らしい video のおかげで、C# における最新の電子メール送信機能が、基本的な smtpclient クラスと mailmessage クラスの処理を超えて進化していることが明らかになりました。 FluentEmailの助けを借りて、開発者は新しいプロジェクトをすばやく作成し、SMTP接続を設定し、動的なメール本文を作成し、本番環境にデプロイする前にローカルですべてをテストすることができます。

