2015年6月10日水曜日

【GAE】メール送信

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

現在はクラウド基盤「Google App Engine(以下、GAE)」の連載中です。

今回のテーマはメール送信です。

実装


GAEのメール送信は簡単です。
まずはソースからどうぞ。

public void send() throws Exception {

        logger.fine("メール送信:開始");

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("fromアドレス"));
        msg.addRecipient(
            Message.RecipientType.TO,
            new InternetAddress("toアドレス"));

        msg.setSubject("タイトル", Encode.ISO2022JP);
        msg.setText("本文");

        // 送信実行
        Transport.send(msg);

        logger.fine("メール送信:終了");

    }

特に特記事項はありませんね。
Java標準のメール送信ライブラリ「JavaMail」が使用出来ます。

サンプルはネット上に無数に転がっていますのでお好きなサイトを参考にして下さい。

特記事項:FROMアドレス

しかし、やっぱりGAEには特性があるんですね。
それは「FROMアドレス」の制限です。

メールというのは非常に脆弱性の多いツールでして、「スパム」というものがあります。日本語で訳せば迷惑メールです。
GoogleはGAEをスパムとして使われてしまうのを防ぐ為にスパム防止機能が入っています。それがFROMアドレス制限です。

以下の2種類のアドレスしかFROMに使用出来ません。

  • Google App Engine で Application の管理者として指定しているアドレス
  • 現在のログインユーザのアドレス

なので、「メール送信者は送信専用のダミーアドレスにしておきたい」とかは出来ないのです。
ちゃんと使用可能なアドレスをそのプロジェクトの『管理者』として登録する必要があります。ご注意を。

Gmai連動

しかし、不便なことばかりではありません。
GAEから送信したメールは、何とGmailと連動しているのです。

会社のアドレスなので画面キャプチャは載せられませんが、例えば上記の送信パターンの後者である「GAEアカウントでログインしているユーザのアドレス」で送信した場合、
Gmaiから「送信済みメール」を開きますと、GAE上で送信したメールの送信履歴が残っています。

なので、「メールの送信履歴を保存したい」という要望があった場合でも、自分で履歴管理機能を作り込まずとも、Gmailを見れば自動的に出来ているわけです。
これは凄い機能ですね。

業務用としては非常に信頼性を担保してくれるものだと思います。

費用

このようにキラリと光る便利なGAEメール送信機能ですが、大きな落とし穴も。
課金があるんですね。

ズバリ、
  • 最初の100通は無料。
  • 以後は、100通毎に0.01$
このような料金となっています。
メール如きで金を別枠にするなんて……、と思いますが、これもスパム対策なのかもしれませんね。

1通1円くらいの費用感覚ですので、何万通も無数にスパムを送ると赤字になるということにご注意下さい。

終わりに

以上です。

GAEからのメール送信は非常に簡単ではありますが、私としては「課金」がネックだと思います。

メールなんて前時代的なツールは使うな、というのが先進的なんじゃないでしょうか。

要件にも依りますが、どうしてもメールを大量送信しなければならないという都合がある場合、私だったらメール送信サーバだけは別に用意しますね。

メールの文面や宛先情報はGAE上に保存しておいて、メール送信サーバで常駐するメール送信バッチがGAEにアクセスする。
そしてデータだけ取得し、メール送信サーバにてメールを送信する。

こういう手順なら課金上限には悩まされずに済みますよね?

このように、場合によってはGAEの強い部分だけを活用し、弱い部分は潔く別に用意するという柔軟な戦術もGAEには必要なのです。

1 件のコメント: