2013年6月18日火曜日

JBoss As 7でのJavaMailの設定

Webアプリケーションで、JavaMailを使ってGmailやプロバイダのメールを送りたいという要件は多いかと思います。
そこで、ここではJBoss As 7を用いた、JavaMailの設定からサンプルプログラムまでをメモとして記載したいと思います。

前提条件

  • Windows XP SP3 32bit
  • JBoss 7.1.1 Final

概要

standalone.xmlにSMTPの設定情報を記載し、プログラムでリソースをルックアップし適切なエンコーディングをした後、送信します。

JBoss設定ファイルstandalone.xmlの修正

${JBOSS_HOME}\standalone\configuration\に保存されている、JBossの設定ファイル「standalone.xml」を編集します。
編集箇所は、smtp-server outbound-socket-binding-refタグ内にログイン情報と、
remote-destination hostにSMTPサーバのホスト名を記載します。

<subsystem xmlns="urn:jboss:domain:mail:1.0">
    <mail-session jndi-name="java:jboss/mail/Default">
        <smtp-server outbound-socket-binding-ref="mail-smtp">
            <login name="xxxx@domain" password="xxxxxxx"/>
        </smtp-server>
    </mail-session>
</subsystem>


<outbound-socket-binding name="mail-smtp">
    <remote-destination host="smtp_server" port="25"/>
</outbound-socket-binding>

サンプルプログラム

以下に簡単なサンプルプログラムを記載します。

package test;

import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/MailTest")
public class TestMail extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Resource(lookup = "java:jboss/mail/Default")
    private Session mailSession;

    public void service(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
        PrintWriter out = res.getWriter();
        try {
            MimeMessage m = new MimeMessage(mailSession);
            Address from = new InternetAddress("from@domain");
            Address[] to = new InternetAddress[] { new InternetAddress(
                "to@domain") };
            m.setFrom(from);
            m.setRecipients(Message.RecipientType.TO, to);
            m.setSubject("JavaMailテスト", "UTF-8");
            m.setContent("日本語対応のJavaMailのテストです。", "text/plain;charset=UTF-8");
            m.setHeader("Content-Transfer-Encoding", "7bit");
            Transport.send(m);

            out.println("success!");
        } catch (javax.mail.MessagingException e) {
            e.printStackTrace(out);
        }
    }
}

日本語を使う場合、適切にエンコーディングをしなければ文字化けしてしまいます。
これを実行するとメールが送信できます。

注意点

設定情報が正しいのに接続が出来ない状態が起こった場合は、プロバイダにより、SMTPのポートを制限しているプロバイダーがあるので、以下の様なエラーが出た場合、telnet等でポートに穴が空いているかを調べる必要があります。

Could not connect to SMTP host: smtp.gmail.com, port: 465;

telnetでのSMTPでログインできるか調べる方法

コマンドプロンプトを開き以下のコマンドを入力します。

telnet smtpサーバ ポート番号
GmailのSMTPの接続確認画面

参考文献

Written By : // 11:18
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。

Blog Archive

Powered by Blogger.