GAEでメールを送信する方法
GoogleAppEngin/javaでメールを送信する方法を紹介します。GAEはメールを送信するためにJavaMailをサポートしています。
(Original Update by Kinologik)
JavaMailはJava環境下でメールを送るための最もポピュラーなライブラリです。メールを送信するためにはSMTP(電子メールを転送するプロトコル)を利用しなければいけませんが、それら下位層をラッピングして非常にわかりやすいインターフェイスになっています。
さっそくサンプルコードを確認してみましょう。
以下はJavaMailを使い、GAEでメールを送信するコードです。JavaMailはjavax.mailパッケージとしてGAEのライブラリに含まれているため、そのまま利用可能です。
■src/MailServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | @SuppressWarnings ( "serial" ) public class MailServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType( "text/plain" ); resp.getWriter().println( "Hello, world" ); Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null ); try { Message msg = new MimeMessage(session); //発信元情報:メールアドレス、名前 msg.setFrom( new InternetAddress( "mail@techbooster.org" , "mhidaka" )); //送信先情報 msg.addRecipient(Message.RecipientType.TO, new InternetAddress( "info@techbooster.org" , "相手の名前" )); //タイトルと本文 msg.setSubject( "タイトル:これはテストメールです" ); msg.setText( "メール本文" ); Transport.send(msg); } catch (AddressException e) { //アドレス不明時 } catch (MessagingException e) { //接続失敗時の処理 } } } |
解説は続きから。
12行目:MIME(マイム、電子メールのフォーマットです)タイプのメッセージを作成します。このとき、引数にsessionを指定していますが、
このセッションにはメールで必要な機能の情報が入っています(ここではデフォルト)。全ての機能をサポートしていないときなどにセッションの内容(props)を変えて調整できます。
15行目:発信元情報をMassageクラスのsetFromメソッドを使って設定します。
setFromメソッドの引数はInternetAddressインスタンスを使います。ここではメールアドレスに”mail@techbooster.org”,
差出人に”mhidaka”を設定しています。
18行目:15行目と同様にaddRecipientメソッドで受け取り人のメールアドレス、名前を設定します。
24行目:タイトル、本文を設定したあと、javax.mail.Transportクラスをつかって、メールを送信します。
送信に失敗したら、アドレス不明(宛先不明)、サーバー接続失敗など幾つかのエラーが返ります。try~catchでもれなく処理するようにしてください。
受信者を追加する
CC,BCCが必要な場合、msg.addRecipientの第1引数をCC,BCCに変更します。
1 2 3 4 5 6 | //CC msg.addRecipient(Message.RecipientType.CC, new InternetAddress( "info@techbooster.org" , "相手の名前" )); //BCC msg.addRecipient(Message.RecipientType.BCC, new InternetAddress( "info@techbooster.org" , "相手の名前" )); |
とても簡単ですね。GAE上ではメールを送る処理はすぐに実行されます。
メール件数が多いなど、送信時間が長くなりそうな場合は、「時間のかかる処理をタスクキューで分割する」を参考に、タスクキューでの処理分割を試してみてください。
以上、おつかれさまでした。
About The Author
ひつじ(mhidaka)
Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org