.NET(core)時代のメール送信はこれだ!

2022年10月3日月曜日

.NET

t f B! P L

.NET Core以降、そして .NET5 or 6時代になり、これまで Windows+Visual Studioの組み合わせで開発する定番のスタイルから脱却し、Linuxや maxOSでの開発や VSCode(Visual Studio Code)などエディタでも容易に開発できるようになった。

この記事では、VSCodeと .NET6でメールを送る方法を紹介する。

前提

  • .NET6および、.NET CLIはインストールされているものとする。

インストールされていない場合は、# コマンドでインストールされている .NETのバージョンを確認する方法 の記事でバージョンの確認方法と、.NET SDKのインストール方法を紹介しているので、参考にされたし。

新規プロジェクトの作成

.NET CLIを使い、コンソールアプリのプロジェクトを作る。.NET CLIでは dotnet コマンドを通じて、プロジェクトの作成・ビルド・実行などの多くの操作ができる。

では、任意のディレクトリに移動後、下記コマンドで新規のコンソールアプリプロジェクトを作成する。

dotnet new console -n TestConsoleApp -o TestConsoleApp

標準の SmtpClientは非推奨

.NET Framework 4.x 時代には、標準クラスとしてSmtpClient が用意されていたが、新しい .NET Coreからは非推奨となり、代わりに「MailKit」を利用することを公式で推奨している。

enter image description here

SmtpClient クラス

MailKitのインストール

「MailKit」は標準のクラスライブラリに含まれていないため、nugetで追加する。
下記コマンドで、作成したコンソールアプリに「MailKit」を追加する。

dotnet add package MailKit --version 3.4.1

メールを送ってみよう

簡単なテキストメールを送るサンプルコードを作ってみる。

// 送信するメッセージを作成する
var email = new MimeMessage();
email.From.Add(MailboxAddress.Parse("from@example.com"));
email.To.Add(MailboxAddress.Parse("to@example.com"));
email.Subject = "テストメールの件名";
email.Body = new TextPart(TextFormat.Text) { Text = "テストメールの本文" };

// メールを送る
using var smtp = new SmtpClient();
smtp.Connect("smtp.ethereal.email", 587, SecureSocketOptions.StartTls);
smtp.Authenticate("[USERNAME]", "[PASSWORD]");
smtp.Send(email);
smtp.Disconnect(true);

(余談)動作確認に便利なフェイクSMTPサーバー「Ethereal」

上のサンプルコードでは、STMPサーバーに smtp.ethereal.email を指定している。

これは「Ethereal」というサービスが公開している SMTPで、いわゆるフェイク SMTPサーバーと呼ばれるものだ。この SMTPサーバーを使用して送信されたメールは、宛先(To)に指定したメールアドレスには送信されずに、「Ethereal」のサービス上でメールの送信履歴が確認できる。

つまり、宛先にメールが飛ばないので、開発時の動作確認などで、メールの送信を気軽にできる。

「Ethereal」の利用手順は簡単だ。

https://ethereal.email/」にアクセスし「Create Ethereal Account」のボタンをクリック。

enter image description here

すると、STMP認証するためのユーザー名とパスワードが発行される。
enter image description here

あとは、表示されたユーザー名とパスワードを、メールを送信するプログラムの認証に設定すればOKである。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ