コンソールアプリケーション(C#)からSES(Simple Email Service)を利用してメールを送信
SESを利用してコンソールアプリケーションでメール送信を行う方法を記載します。実際に試すにはSESをセットアップする必要があります。まだSESのセットアップができていないかたは以下を参考にSESのセットアップを行ってください。(テストメール送信まで出来ればひとまずOK)
AWSコンソールからSES(Simple Email Service)を利用したメール送信 - Codable Tech Blog
Amazon SES SMTP 認証情報の取得
コンソールアプリケーションからSESを使用してメール送信するにあたり、Amazon SES SMTP のユーザー名とパスワードが必要です。以下ではAmazon SES コンソールを使用してAmazon SES SMTP のユーザー名とパスワードを取得します。この情報をあとでプログラム中で利用します。
- Amazon SES コンソールへアクセス
- SMTP Settings > Create My SMTP Credentials をクリック
- 任意のIAM ユーザー名を設定して作成をクリック
- 認証情報のダウンロードをクリックして認証情報を保存する
コンソールアプリケーションの作成
MailKitライブラリの追加
まずはVisual Studioを起動し、MailKitライブラリを追加。このライブラリをメール送信を行うために必要となる。
- ツール > NuGetパッケージマネージャー > ソリューションのNuGetパッケージの管理
- MailKitを選択 > プロジェクトを選択 > インストールを選択
メール送信コードの記述
以下のコードを記述します。なお「xxxx」の箇所は書き換えが必要です。
namespace ConsoleApp { class Program { static void Main(string[] args) { //非同期処理の実行 Task task = Task.Factory.StartNew(async () => { await SendEmailAsync("xxxx(送信元メールアドレスを指定する)","xxxx(受信メールアドレスを指定する)", "xxxx(タイトルを指定する)", "xxxx(メッセージを指定する)"); Console.WriteLine(); }).Unwrap(); task.Wait(); Console.WriteLine("読み込み完了!"); } static public async Task SendEmailAsync(string from, string to,string subject, string message) { // Amazon SES SMTPユーザー名を指定 const String SMTP_USERNAME = "xxxx"; // Amazon SES SMTPユーザーのパスワードを指定 const String SMTP_PASSWORD = "xxxx"; // メールのオブジェクトを作成する var emailMessage = new MimeMessage(); // メール送信元の名前とメールアドレスを指定する emailMessage.From.Add(new MailboxAddress("xxxx(送信者名)", from)); // メール送信先を指定する emailMessage.To.Add(new MailboxAddress("xxxx(受信者名)", to)); // メールの件名を設定する emailMessage.Subject = subject; // メールの本文を指定する(テキストメッセージ) emailMessage.Body = new TextPart("plain") { Text = message }; using (var client = new SmtpClient()) { //SMTPサーバに接続する。SMTPサーバーの指定はリージョンごとに異なるのでSESのリージョンに合わせたエンドポイント名を指定 //リージョン名 | エンドポイント名 //米国東部(バージニア北部) | email-smtp.us-east-1.amazonaws.com //米国西部 (オレゴン) | email-smtp.us-west-2.amazonaws.com //欧州 (アイルランド) | email-smtp.eu-west-1.amazonaws.com await client.ConnectAsync("xxxx(SESのエンドポイントを指定)", 587, SecureSocketOptions.StartTls); // SMTPサーバで認証する(IDとパスワード) await client.AuthenticateAsync(SMTP_USERNAME, SMTP_PASSWORD); // メールを送信する await client.SendAsync(emailMessage); // SMTPサーバとの接続を切る await client.DisconnectAsync(true); } } } } |cs|< **動作確認