4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon Simple Email Service(SES)をSMTPサーバとして利用する方法

Last updated at Posted at 2021-04-24

はじめに

他の記事で、サーバ内にダミーSMTPサーバを立ててメール送信をする記事を書いたが、これはダミーであるため本当のメール送信にはならないので、本番で利用しているサーバの状態をメールで通知して、自分のメールアドレスに受信することができない。
自分のメールアドレスで受信するために、今回はメール送信サービスであるAmazonのSimple Email Service(SES)の設定の仕方を書いた。
これを利用すれば、客のメールサーバを利用することが不要になり、自分でSMTPサーバを構築する必要がなくなる。

Simple Email Serviceの設定

はじめに送信元のメールアドレスを有効にしてから、
SMTPサーバでIAMを作成してSMTPサーバを有効にします。
SMTPサーバのポート(25, 465 or 587)がいくつか用意されているが、それらのポートで社内から送ることはできないかもしれないので、ポートの制限のない環境から送信するようにする。

メールの登録

  • メールの有効化
    image.png

IAMユーザの作成

送信するメールとは別にIAMの権限が必要なので、IAMユーザを作成します。
image.png

作成ボタンを押す。
image.png

IAMの情報をダウンロードする。
image.png

ダウンロードしたファイルの中身
image.png

送信テスト

今回は、MacからVisualStudioCodeを使って、言語は、PowerShellでメールを送信したいと思います。
赤で消してあるところの最初は、AWSのIAMユーザとパスワードで
次は、メールの有効化の章で登録したメールアドレスです。

  • コードを貼り付け、プログラムを実行します。VS Codeであれば、F5キーでコードを実行することができます。
    ターミナルにエラー表示されなければ送れています。
    ※今回、ターミナルに黄色文字で警告が表示されていますが、メール送信に利用しているSend-MailMessageコマンドが廃止予定であるためです。メールの送信テストには問題ありません。
    image.png

  • 自分のメールアドレスにメールが届きます。これでテストは完了です。
    image.png

プログラム

  • SMTP USER NAME HEREやSMTP PASSWORD HEREは、IAMユーザのユーザ名やパスワードに置き換えてください。

VBSで送信

VBSでも書きましたが、デバックのしやすさを考えると、今後はPowerShellで書いたほうが良いです。

vbs

Set message = CreateObject("CDO.Message")
message.From = "foo@example.com"
message.To = "bar@example.com"
message.Subject = "件名"
message.TextBody = "本文。"
message.TextBodyPart.Charset = "ISO-2022-JP"

Const schemas = "http://schemas.microsoft.com/cdo/configuration/"
message.Configuration.Fields.Item(schemas + "sendusing") = 2
message.Configuration.Fields.Item(schemas + "smtpconnectiontimeout") = 30
message.Configuration.Fields.Item(schemas + "smtpserver") = "email-smtp.us-east-1.amazonaws.com"
message.Configuration.Fields.Item(schemas + "smtpserverport") = "465"
message.Configuration.Fields.Item(schemas + "smtpusessl") = true
message.Configuration.Fields.Item(schemas + "smtpauthenticate") = true
message.Configuration.Fields.Item(schemas + "sendusername") = "****SMTP USER NAME HERE****"
message.Configuration.Fields.Item(schemas + "sendpassword") = "****SMTP PASSWORD HERE****"
message.Configuration.Fields.Update()

message.Send()

PowrShellで送信

  • サンプルに書いてあるSend-MailMessageのコマンドは、廃止予定であるため、下記のサイトから最新のコマンドを参考にしてください。この記事を書いた現在では、警告が表示されるだけで利用は可能です。

コマンドラインを使用して Amazon SES SMTP インターフェイスへの接続をテストする

Powershell
# Define username and password
$smtpUserName = '****SMTP USER NAME HERE****'
$smtpPassword = ConvertTo-SecureString '****SMTP PASSWORD HERE****' -AsPlainText -Force

# Convert to SecureString
[pscredential]$credential = New-Object System.Management.Automation.PSCredential ($smtpUserName, $smtpPassword)

# Send Email - change the values if needed.
Send-MailMessage -Credential $credential `
-useSSL `
-smtpServer 'email-smtp.ap-southeast-2.amazonaws.com' `
-port 587 `
-from 'mailer@lzex.cf' `
-to 'june@lzex.cf' `
-subject `
'Email via Amazon SES SMTP Endpoint' `
-body 'Email via Amazon SES SMTP Endpoint'

C#で送信

  • .Net Framework3.5でも動作するようにしました。
C#
using System;
using System.Net;
using System.Net.Mail;

namespace AmazonSESSample
{
	class Program
	{
		static void Main(string[] args)
		{
			String FROM = "mailfrom@test.co.jp";
			String FROMNAME = "Sender Name";
			String TO = "mailto@test.co.jp";
			String SMTP_USERNAME = "****SMTP USER NAME HERE****"; // Replace smtp_username with your Amazon SES SMTP user name.
			String SMTP_PASSWORD = "****SMTP PASSWORD HERE****";     // Replace smtp_password with your Amazon SES SMTP password.
			//String CONFIGSET = "ConfigSet";   //これがあると動作しなかった
			String HOST = "email-smtp.ap-northeast-1.amazonaws.com";
			int PORT = 587;  //25, 465 or 587

			// The subject line of the email
			String SUBJECT = "Amazon SES test (SMTP interface accessed using C#)";

			// The body of the email
			String BODY =
				"<h1>Amazon SES Test</h1>" +
				"<p>This email was sent through the " +
				"<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " +
				"using the .NET System.Net.Mail library.</p>";

			// Create and build a new MailMessage object
			MailMessage message = new MailMessage();
			message.IsBodyHtml = true;
			message.From = new MailAddress(FROM, FROMNAME);
			message.To.Add(new MailAddress(TO));
			message.Subject = SUBJECT;
			message.Body = BODY;
			// Comment or delete the next line if you are not using a configuration set
			//message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET); //これがあると動作しなかった

			using (Mail Ht = new Mail())
			{
				Ht.SetData( HOST,  PORT,  SMTP_USERNAME,  SMTP_PASSWORD, message);
			}
		}
	}
	public class Mail : IDisposable
	{
		void IDisposable.Dispose()
		{

		}

		public void SetData(string HOST, int PORT, string SMTP_USERNAME, string SMTP_PASSWORD, MailMessage message)
		{
			var client = new System.Net.Mail.SmtpClient(HOST, PORT);
			// Pass SMTP credentials
			client.Credentials =
				new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);

			// Enable SSL encryption
			client.EnableSsl = true;

			// Try to send the message. Show status in console.
			try
			{
				Console.WriteLine("Attempting to send email...");
				client.Send(message);
				Console.WriteLine("Email sent!");
			}
			catch (Exception ex)
			{
				Console.WriteLine("The email was not sent.");
				Console.WriteLine("Error message: " + ex.Message);
			}
		}
	}
}

料金について

課金される項目 料金 追加料金
Amazon EC2 でホストされているアプリケーションからの E メール送信 月に 62,000 件までは 無料それ以上の E メール送信については 1,000 件ごとに 0.10 USD 添付ファイル 1GB につき 0.12 USDEC2 を使用する場合はその料金
E メールクライアントやその他のソフトウェアパッケージからの E メール送信 1,000 件ごとに 0.10 USD 添付ファイル 1GB につき 0.12 USD
E メール受信 最初の 1,000 件までは 0 USD それ以降は 1,000 件ごとに 0.10 USD 受信メールチャンク 1,000 件につき 0.09 USD

参考書籍

  • 今回のメール送信テストにあたって下記の書籍を参考にしました。
    メール送信以外にも1からアプリを作ってAWSを学ぼうという書籍なので、良い書籍です。

Amazon Web Services アプリ 開発運用入門
image.png

参考サイト

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?