Amazon SES(Simple Email Service)でメールを送ってみなイカ?

Amazon SES(Simple Email Service)でメールを送ってみなイカ? はてなブックマーク - Amazon SES(Simple Email Service)でメールを送ってみなイカ?


◆ Amazon SES を使ってみなイカ?

Amazon SES メールを持ってきたダンボー君。メールだお!AWS に新メニューが1月25日に追加されました。Amazon Simple Email Service (Amazon SES) は、その名の通り、メールを送ることが出来るサービスなのです。メールが送るといっても、そこは Amazon Web Services が提供するサービスはひと味違いまっせ。Postfix や Sendmail のような MTA 的な機能を、API を使って利用できるのです。 これまでメールを送るときは、MTA のセットアップや、外部の SMTP サーバを利用しないと送ることができませんでした。ですが、今回リリースされた Amazon SES を使えば、プログラム的にメールを送信できるので、面倒なメールサーバの調達・準備から解放されます。正直、これは画期的だと思います。

          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \   メールを送るためには AWS でも MTA の設定をするか
    |      |r┬-|    |   外部の SMTP 鯖を建てる必要があるお
     \     `ー’´   /   
    ノ            \
  /´               ヽ

            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \ 
    |   (__人__)    u.   | クスクス Amazon SES を知らないひとってw>
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ

…という状況になっていたりする訳です。

イカ、簡単に SES 概要と、実際に linux サーバからテストメールを送るまでを、チュートリアルとしてまとめてみました。

◆ Amazon SES の特長

Amazon SES の機能的な特長を簡単にまとめると、次の通り。

  • シンプル! … メールを送るために特化したシステム。これまでメールを送るには、何かインストールしたり、セットアップしたり、ライセンスが必要だったり。でも、Amazon SES は単純に API を使うだけで利用出来ます。
  • 高くないよ! … 前払いが不要で、使った分だけ課金される方式。しかも料金は、メールを一日にどれだけ送るかによって決まります。
  • 信頼性があるよ! … Amazon SES は、当然 Amazon Web Services のデータセンタやネットワークインフラを使用。メールの送信用データは複数のデータセンタとサーバで冗長化されてるので、高い可用性があります。
  • スケーラブルだよ! … 年あたり10億通のメールを捌く世界中の Amazon のウェブサイトに使われている技術がベースになってます。
  • 他の AWS のサービスとの連携ができるよ!… Amazon EC2 や Beanstalk からも簡単にメールを送ることができます。

◆ 気になるお値段は?

「でも、お高いんでしょう?」という感じもあるのですが、Amazon EC2 / Beanstalk からダイレクトのアクセスであれば、Free Tier として2,000通/日 は無料で利用することができます(ただし、データ転送量は別。1GB /月まで Free Tier では無償だけれど、それ以上は課金されるので注意)。

一般的料金は、「メール 1,000 通あたり $0.1 」です。更に、データ転送量が、In 側「 $0.1/GB 」の料金が発生します。Out 側は転送量によって料金が変わっています。

  • 1GB/月まで … $0.00
  • ~ 10TB/月 … $0.15/GB
  • ~ 40TB/月 … $0.11/GB
  • ~ 100TB/月 … $0.09/GB
  • ~ 150TB/月 … $0.08/GB

◆ Amazon SES のしくみ

Amazon SES の構造は、とてもシンプル。

クライアント側のアプリケーションが、API を使い Amazon SES にメール送信リクエストを送ります。次に、Amazon SES はリクエストを処理し、指定されたパラメータを元にしてメールの配送を開始します。あとは通常のインターネットを経由し、メールが配送されます。もしメールの受信者がいない場合は、バウンスメールが送信者のアドレス宛に戻ってきます。

※ 詳細は Developer Guide 参照

さて、では、実際に Amazon SES を使ってみましょう! 以下の手順では、コマンドラインから Amazon SES を使えるようになるまでを纏めてみました。

◆ Amazon SES チュートリアル。メールを SES で送ってみよう!

Amazon SES を使うには、まずサインアップを行います。

  1. http://aws.amazon.com/sec/ にアクセス
  2. ページ右側にある 【 Sign Up For Amazon SES 】 ボタンをクリック
  3. 料金説明が表示されます。【 Complete Sign Up 】をクリック
  4. 画面が切り替わります
  5. 同時に「Amazon Simple Email Service Sign-Up Confirmation」という件名のメールも届きます。これでサインアップは完了です。

サインアップの次に「Amazon SES」用のメールアドレスの「認証」を行う必要があります。From: 部分が認証されたメールアドレスでないと、Amazon SES を使ってメールを送ることは出来ません。手順は次の通りです。

  1. Security Credentials の確認
    Access Key IDSecret Access Keys を確認しておきます。確認するには、AWS のサイトの 「 Account 」→ 「 Security Credentials 」 を選びます(URL はこちらです)。

    API を使うときにはおなじみですね。どんな操作もできる魔法の鍵のようなものなので、取り扱いには十分気をつけて下さい。

  2. Amazon SES Developer Tools から、ツール群 Amazon Simple Email Service Script をダウンロードして、展開します。私の場合は、次のように作業しました。
    $ cd
    $ wget http://aws-catalog-download-files.s3.amazonaws.com/AmazonSES-2011-01-24.zip
    $ unzip AmazonSES-2011-01-24.zip
    $ cd AmazonSES-2010-12-01 
  3. それから、Access Key ID と Secret Access Key を記録するファイルを作成します。
    $ vi ./aws-credentials
  4. 中身は、次のように記述します。
    AWSAccessKeyId=先ほど確認したAceess Key ID
    AWSSecretKey=先ほど確認したSecret Access Key
  5. 認証用のコマンドを実行します。

    $ ./ses-verify-email-address.pl -k ./aws-credentials -v 認証したいメールアドレス
    

    ※実行する環境によっては、Perl のモジュールが出ないと警告が出る場合があります。私の場合は、次のように表示されました。

    $ ./ses-verify-email-address.pl -k ./aws-credentials -v zem@pocketstudio.jp
    $ Can't locate object method "new" via package "XML::LibXML::XPathContext"
     (perhaps you forgot to load "XML::LibXML::XPathContext"?) at
     ./ses-verify-email-address.pl line 74
    

    エラー内容は「XML::LibXML::XPathContext」というモジュールが無いよ、というものなので、CPAN からサクッとインストールしました。

    # cpan XML::LibXML::XPathContext 
  6. 実行時にエラーがなければ、指定したアドレス宛に「Amazon SES Address Verification Request」というメールが届いています。メール本文のリンクをクリックすると、認証が完了し、次のように画面が切り替わります。

以上でアドレスの認証は終わりです。上手くいきましたか?

◆ 実際にメールを送ってみる

この流れで、実際にメールを送ってみることも出来ます。認証済みのアドレスが me@example.jp であれば、

$ ./ses-send-email.pl -k ./aws-credentials -s "Test of Amazon SES" -f me@example.jp \ 
    me@example.jp < msgbody.txt

このように実行します。ちょっと待てば、すぐにサンプルのメールが届くはずです。本文「This message was sent using Amazon SES.」と書かれたメールが届きましたか?

ちなみに、登録直後はサンドボックス環境しか利用出来ず、制限がかかった状態です。認証アドレス意外にメールを送信しようとしても「Email address is not verified」とエラーが出て送信出来ません。テスト環境以外にメールを送りたい場合は、以下の申請用フォームからリクエストを送る必要があります。

Request for Production Access to Simple Email Service
http://aws.amazon.com/ses/fullaccessrequest

所定の項目を記入して、【 submit 】 を押すと、リクエストが送信されます。申請は24時間以内に処理されるようで、私の場合は数時間後には使えるようになっていました。

申請後は、登録したアドレス意外にもメールを送ることができるようになります。

◆ 日本語のメールを処理したい

ses-send-email.pl では、メールを送ることができますが、恐らく多くの方が本文の文字化けにハマると思います。これはスクリプトが多言語環境を意識されてないようなので、スクリプト中 30 行目あたりに

binmode STDIN,  ":utf8";

このように書いておけば回避できます。別の方法としては -r オプションを付けて raw モードで送るのも有りですね。どうやら Amazon SES の内部的には UTF-8 で処理されているようなので、おまじないみたいなもの、と覚えておくと幸せになれるかもしれません。

◆ 感想とか、次回予告…!?

というわけで、どうですか、みんなで使ってみなイカ?という訳でまとめてみました。内容が分かりにくい、リクエストなどありましたら、お知らせ下さい。次回があるかもしれません。ネタ的には、スクリプトからのメール送信を極めるとか、ケータイに送るための Sender ID 指定(BINDなら IN TXT “v=spf1 ~” の中に  include:amazonses.com を記述)などあります。

個人的には、Amazon SES はとっても面白いと思います。特にインフラエンジニア向けにとって。普通、メールを送ろうとすると MTA のセットアップは必要なのですが、「メールを送る」という目的を達成するためのオプションが、Amazon SES によって選択が広まったと思います。特に、ローカル環境や Windows Server など、一筋縄にメールを送ることが出来ない環境からも、サクッとメールを送ることが出来るのは大きいと思います。僕自身は、この機能のリリースを見たときに

                        ,.-――――‐  、
                       /      ,.-――┴- 、
.                      /   |   /: : l、: : : ;l: : : : :\
    ┏┓    ┏━━┓      /   :! ./: : :、: :!_\;/ _V\ : |`          ┏━┓
┏━┛┗━┓┃┏┓┃.    .〈 ___V: : : :|∧|      __`|∨.         ┃  ┃
┗━┓┏━┛┃┗┛┃┏━━.` ̄丁 |: |:l :| __   〃⌒V|..━━━━━┓┃  ┃
┏━┛┗━┓┃┏┓┃┃         ヽ|: NV:!〃⌒__ //}|.        ┃┃  ┃
┗━┓┏━┛┗┛┃┃┗━━━━ /: :{_|: :|//f´   ヽ}  八━━━━━┛┗━┛
    ┃┃        ┃┃.        _/: :/:/ : ト .丶___,ノイ\_:\.         ┏━┓
    ┗┛        ┗┛   __,/: :_;/: /,.イ⌒ヽ!ヽ: ト、\  !: |__.      ┗━┛
                  |: : : : :/__/: ;.イ:/ ,リ    }、\| : | └┐:|__ 
               /: : | ̄ 「: :__∧fニyイ|:〉    Vにう: 〉  \/  
.                \/  _,|: :|_〉:(/:/     ,Vト-‘ :|
                    \/―ヘ《O\___/O〉 ̄
                           >、O_O,.イ
                         (/  ̄ ̄|_ノ

という妙なうれしさを覚えました。

是非、みなさんもチャレンジしてみて下さいね。

               . -—- .      やったッ!! さすが Amazon!
             /       ヽ
          //         ‘,      おれたちにできない事を
            | { _____  |        平然とやってのけるッ!
        (⌒ヽ7´        ``ヒニ¨ヽ
        ヽ、..二二二二二二二. -r‐”′     そこにシビれる!
        /´ 〉'”>、、,,.ィ二¨’ {.  ヽ     _ _      あこがれるゥ!
         `r、| ゛._(9,)Y´_(9_l′ )  (  , -‘′ `¨¨´‾`ヽ、
         {(,| `”’7、,. 、 ⌒  |/ニY {              \
           ヾ|   ^’^ ′-、 ,ノr’)リ  ,ゝ、ー`——-‘- ∠,_  ノ
           |   「匸匸匚| '”|ィ’( (,ノ,r’゛へ.‾‾,二ニ、゛}了
    , ヘー‐- 、 l  | /^”⌒|  | | ,ゝ )、,>(_9,`!i!}i!ィ_9,) |人
  -‐ノ .ヘー‐-ィ ヽ  !‐}__,..ノ  || /-‐ヽ|   -イ,__,.>‐  ハ }
 ””//ヽー、  ノヽ∧ `ー一’´ / |′ 丿!  , -===- 、  }くー- …_
  //^\  ヾ-、 :| ハ  ‾ / ノ |.  { {ハ.  V’二’二ソ  ノ| |   `ヽ
,ノ   ヽ,_ ヽノヽ_)ノ:l ’ーー<.  /  |.  ヽヽヽ._ `二¨´ /ノ ノ
/    <^_,.イ `r‐'゛ :::ヽ  \ `丶、  |、   \\'ー--‐''"//
\___,/|  !  ::::::l、  \  \| \   \ヽ   / ノ

 
 
参考URL:

AWS に新メニューが先月追加されました。Amazon Simple Email Service (Amazon SES) は、その名の通り、メールを送ることが出来るサービスなのです。メールが送るといっても、そこは Amazon Web Services が提供するサービスはひと味違いまっせ。Postfix や Sendmail のような MTA 的な機能を、API を使って利用できるのです。 これまでメールを送るときは、MTA のセットアップや、外部の SMTP サーバを利用しないと送ることができませんでした。ですが、今回リリースされた Amazon SES を使えば、プログラム的にメールを送ることが出来るのです。

One thought on “Amazon SES(Simple Email Service)でメールを送ってみなイカ?

  1. Pingback: Tweets that mention Amazon SES(Simple Email Service)でメールを送ってみなイカ? | Pocketstudio.jp log3 -- Topsy.com