Microsoft Windows Server IIS SMTP経由でのAmazon SES
渡辺です。
Amazon SESを介してEメールを送信するときに、Microsoft Windows Server の IIS SMTP サーバーを介する方法を試してみました。 手順は公式ドキュメントにありますが、スクリーンショットを交えて解説します。
クライアントからのメール送信ではWindowsサーバをSMTPサーバとし、 WindowsサーバのSMTPサーバでは、Amazon SESにメールをリレーする設定を行います。
EC2インスタンスの起動
はじめに、マネジメントコンソールからWindows Server 2012のインスタンスと、送信確認用のAmazon Linuxインスタンスを作成します。 セキュリティグループの設定で送信確認用インスタンスからWindowsサーバにSMTP通信ができるようにしておいてください。
Amazon SESの準備
Amazon SESに送信元・送信先メールアドレスを登録し、verifyしておきます。 また、SMTPの認証情報を作成しておいてください。
Windows Serverの準備
Windowsサーバにリモートディスクトップで接続し、IISサーバとSMTPサーバをインストールしていいきます。
IISとSMTPサーバのインストール
Server Managerのダッシュボードを起動し、ダッシュボードの「Add roles and features」をクリックします。
ウィザードを進めていき、「Server Roles」で「Web Server(IIS)」を選択します。
次に「Features」で「SMTP Server」を選択します。
Web Server Role(IIS)では、Management Toolsの「IIS 6 Management Compatibility」をチェックします。
後はウィザードに従ってインストールを完了します。
IIS SMTP サービスの設定
Server Managerのダッシュボードの「Tools」から「Internet Information Service(IIS) 6.0 Manager」を選択します。
SMTP Virtual Server #1のプロパティを開きます。 プロパティの「Access」タブから「Relay」をクリックし、送信元となるサーバのアドレスを追加します。
今回は、ローカルホスト(127.0.0.1)と送信確認用Amazon Linux(172.31.4.109)を登録しました。
続けて「Delivery」タブを開きます。 「Outbound Security」をクリックし、「Basic authentication」にAmazon SESのSMTP認証情報を設定します。 また、「TLS encryption」にチェックを入れてください。
次に「Outbound connections」をクリックし、「TCP port」が25または587であることを確認します。
最後に「Advanced」をクリックし、「Smart host」にSESのエンドポイントを設定します。
設定が完了したならば、SMTPサーバを再起動(Stop -> Start)してください。
送信確認
送信確認用Amazon LinuxにSSHログインし、mailxコマンドでメールを送信してみます(SMTPサーバのメール送信テストにmailxコマンドを使う)。
確認には、次のように~/.mailrcでsmtpサーバとfromアドレスを指定します。
set smtp=smtp://172.31.4.107:25 set from="classmethod@example.com"
準備ができたならば、メールを送信してみましょう。
$ mail -s "TEST" -v classmethod@example.com
送信出来なかった場合は、以下の点を確認してみてください。
- SESで送信元送信先アドレスがverifyされているか?(もしくはプロダクション申請が通っているか)
- Windowsサーバと送信確認用サーバが25ポートでアクセスできるか?
- 送信確認用AmazonLinuxのIPアドレスが、SMTPサーバのリレー許可アドレスに含まれているか?
まとめ
Windows ServerのSMTPサーバを利用すると、メール送信時のリトライ処理やSESの設定が一元管理できるメリットがあります。 ただし、Windows Serverがメールの単一障害点になることは注意してください。