tkxmailによるメール送信の方法(5)
JavaEEでのメール送信

今回は、tkxmaiiライブラリをJavaEEで使う方法を解説します。JavaEEでは、前回まで使っていたMailクラスの代わりにEmailクラスを使います。EmailクラスはMailクラスをそのままEJB(Enterprise JavaBeans)に移しただけのクラスですから、使い方はまったく同じです。

JavaEEでのメール送信

使い方の例として、次のような2枚の画面を持つウェブアプリケーションを作りました。ウェブで、メールアドレス、メールタイトル、本文といった必要データを入力する仕組みです。そして、「送信」ボタンを押すとメールを送信して、「送信しました」の画面に遷移します。


Emailクラスのメソッドは、最初からマルチスレッドで実行するようにしてあるので、バッキングビーンのプログラムはJavaSEの時よりも簡単になります。次は、画面のデータを受け取って、メールを送信するバッキングビーンです。

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import net.tkxtools.util.Email;
import org.hibernate.validator.constraints.NotBlank;

@Named
@RequestScoped
public class Bb {
    @NotBlank
    private String to;       // 宛先メールアドレス
    private String subject;  // メールタイトル
    @NotBlank
    private String body;     // メール本文
    private String  from = "student@tk-webs.com";  // 送信元メールアドレス
    
    @EJB    Email email; // Emailのインスタンスを受け取る
    
    public  String sendmail(){
        // propには、ユーザ名、パスワード、サーバー名、ポート番号が入っている
        Properties prop =   PropertiesUtil.create("/resources/data/mail.xml");
        email.send(prop, to, from, subject, body);  // メール送信       
        return  "complete.xhtml";  // 送信完了画面へ
    }
    // 以下、セッターとゲッター(省略)
}

この例題は次のURLから、NetBeans用のプロジェクトファイルをダウンロードできます。

http://k-webs.jp/download/emailsample_2.zip

※Netbeansで開いたら、ライブラリを展開してjavaEE7 APIライブラリが含まれているか確認してください(なければ自分で追加してください)。また、tkxmail.jartkxmailbean.jar、をライブラリに追加してください。これらのJarファイルは、まだダウンロードしていない人のために、このzipファイルの中にも入れてあります。結局、プロジェクトの構成は次のようになります。

なお、resourcesフォルダのconfフォルダにあるmail.xmlには、メールサーバーのユーザー名やパスワードなどが記載されています。ダミーのデータが書きこまれているので、これをご自分の環境に合わせて書き直しから実行してください。

マルチスレッドでの実行について

EJBでは、特にコードを書かなくても、メソッドに@Asynchronousを付けるだけでマルチスレッドで実行するようにできます。Emailクラスは、セッションビーン(EJB)ですから、メール送信を行うすべてのメソッドに、@Asynchronousアノテーションを付けています。

@Asynchronous
public void send(Properties prop, String to, String from, String subject, String body) {
    send(prop, to, from, subject, body, "TO");
}

※@Asynchronousの詳細は「わかりやすいJavaEE」の360ページに解説があります。

HTMLメールやファイル添付メールはどうするの?

JavaSEの場合とまったく同じようにして、HTMLメールやファイル添付メール、それから一斉メールを送ることができます。tkxmailのAPIドキュメントを確認してください。JavaSE用のMailクラスと、JavaEE用のEmailクラスは、同じメソッドを、同じシグニチャで定義しています。

tkxmailのAPI
http://k-webs.jp/docs/tkxmail-api/index.html

ただ、ウェブシステムでは、HTMLメールのためのHTMLファイルや、添付ファイルはローカルからファイルアップロードで送る必要があります。ファイルアップロードについては、「わかりやすいJavaEE」では、PrimeFacesのファイルアップロードを使う方法を解説していて、JSF単体での方法は解説していませんでした。

そこで、次回は、ファイルアップロードについて詳しく解説します。アップロードしたファイルをbyte配列のまま利用する方法、ファイルとして保存する方法、そして、データべースに保存する方法などについて、詳しく解説します。

次回「ファイルアップロード」へ

読者になる

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。