Codable Tech Blog

iPhoneアプリケーション開発と AWS(Amazon Web Service)活用に関する記事を配信

コンソールアプリケーション(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 のユーザー名とパスワードを取得します。この情報をあとでプログラム中で利用します。

  1. Amazon SES コンソールへアクセス
  2. SMTP Settings > Create My SMTP Credentials をクリック
  3. 任意のIAM ユーザー名を設定して作成をクリック
  4. 認証情報のダウンロードをクリックして認証情報を保存する

コンソールアプリケーションの作成

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|<

**動作確認