GoogleAppEngin/javaでメールを送信する方法を紹介します。GAEはメールを送信するためにJavaMailをサポートしています。
(Original Update by Kinologik)
JavaMailはJava環境下でメールを送るための最もポピュラーなライブラリです。メールを送信するためにはSMTP(電子メールを転送するプロトコル)を利用しなければいけませんが、それら下位層をラッピングして非常にわかりやすいインターフェイスになっています。
さっそくサンプルコードを確認してみましょう。
以下はJavaMailを使い、GAEでメールを送信するコードです。JavaMailはjavax.mailパッケージとしてGAEのライブラリに含まれているため、そのまま利用可能です。
■src/MailServlet.java
@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に変更します。
//CC msg.addRecipient(Message.RecipientType.CC, new InternetAddress("info@techbooster.org", "相手の名前")); //BCC msg.addRecipient(Message.RecipientType.BCC, new InternetAddress("info@techbooster.org", "相手の名前"));
とても簡単ですね。GAE上ではメールを送る処理はすぐに実行されます。
メール件数が多いなど、送信時間が長くなりそうな場合は、「時間のかかる処理をタスクキューで分割する」を参考に、タスクキューでの処理分割を試してみてください。
以上、おつかれさまでした。