2011年3月23日水曜日

SES-Postfixの構築(AWS)

スズキです。

まずは、こちらよりSESの申し込みをしておきます。


少しすると、下記のようなメールが届き、利用出来るようになります。

--------
Dear Amazon SES customer:

We have received a request to authorize an email address for use
with Amazon SES.  To confirm that you are authorized
to use this email address, please go to the following URL:

https://email-verification.us-east-1.amazonaws.com/?XXXXXXXX

Your request will not be processed unless you confirm the address using this URL.

To learn more about sending email from Amazon SES,
please refer to the Amazon SES Developer Guide.

Sincerely, Amazon Web Services
--------

次に、「SESを使ってみた」で紹介したように、
"Amazon Simple Email Service Scripts"を利用出来るようにします。
(最新のスクリプトでは、こちらの日本語対策も反映されています)

今回は下記のようなディレクトリ構造でインストールしました。
(利用するには適当にCPANモジュールを入れる必要もあります)


"Amazon Simple Email Service Scripts"が利用出来るようになったら、
Postfixの設定です。

とりあえず、下記でインストール&自動起動まで行っておきます。

# yum -y install postfix
# chkconfig postfix on

そして下記のように、
"/etc/postfix/master.cf"と"/etc/postfix/master.cf"を修正し、
Postfixがメール送信をSESを用いて行うようにします。

--------【master.cf】--------
...
#
# Amazon SES
#
ses       unix  -       n       n       -       -       pipe
  flags=R user=nobody argv=/opt/aws/ses/bin/ses-send-email.pl -r -k /opt/aws/ses/etc/credential.conf -f ${sender}

--------

--------【main.cf】--------
...
#
# Amazon SES
#
default_transport = ses
--------

この状態でPostfixを下記のようにスタートすれば、

# /etc/init.d/postfix start

このPostfixで処理されたメールはSESで送信されるはずです。

実際にこちらで紹介したtelnetを利用した方法で送信確認してみましたが、
メールログに下記のようなエラーが出力されてしまいました。

--------【maillog】--------
...
Command died with status 2: "/opt/aws/ses/bin/ses-send-email.pl".
Command output: Can't locate SES.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8
.) at /opt/aws/ses/bin/ses-send-email.pl line 27.
BEGIN failed--compilation aborted at /opt/aws/ses/bin/ses-send-email.pl line 27. 
...
--------

これは、Perlのライブラリディレクトリに"SES.pm"が無い!
って話なので、下記のようにシンボリックリンクを張っておきます。

# pwd
/usr/lib/perl5/site_perl
# ln -s /opt/aws/ses/bin/SES.pm SES.pm

再び同様のテストを行うと、今度は下記のようなエラーが発生しました。

--------【maillog】--------
...
Command died with status 1: "/opt/aws/ses/bin/ses-send-email.pl".
Command output: Missing required header 'Subject'.
...
--------

これは、メールヘッダに"Subject"が無い!
って話なので、テストするときに、下記のように"Subject"を書くようにしました。

--------【telnet localhost 25】--------
DATA
354 End data with .
Subject: test

test
.
--------

すると、今度は次のようなエラーに変わりました。

--------【maillog】--------
...
Command died with status 1: "/opt/aws/ses/bin/ses-send-email.pl".
Command output: User name is missing: 'undisclosed-recipients:;'.
...
--------

これは、"To"がおかしい!
って話なので、テストするときに、下記のように"To"もちゃんと書くようにしました。

--------【telnet localhost 25】--------
DATA
354 End data with .
Subject: test
To: suzuki@suz-lab.com

test
.
--------

するとようやく、ログも以下のようになり、
正しくメールを送信することができるようになりました。

--------【maillog】--------
...
to=,
relay=ses,
delay=441,
delays=439/0/0/1.3,
dsn=2.0.0,
status=sent (delivered via ses service)
...
--------

最後に、こちらから"Production Access"の申請を行い、
申請が通れば、任意のメールアドレスにメールを送信することが可能となります。

せっかくなので、次はリレーの設定まで行おうと思います。
--------
http://www.suz-lab.com

0 コメント: