Oracle® Fusion Middleware Oracle WebLogic Serverアプリケーションの開発 12c リリース1 (12.1.1) B65893-02 |
|
![]() 前 |
![]() 次 |
この章では、WebLogic ServerでJavaMailをプログラミングしてWebLogic Serverアプリケーションに電子メール機能を追加する方法を説明します。
この章の内容は以下のとおりです。
WebLogic ServerにはJavaMail APIバージョン1.4参照実装が含まれています。JavaMail APIを使用すると、WebLogic Serverアプリケーションに電子メール機能を追加できます。JavaMailを使用すると、自社ネットワークまたはインターネット上のIMAP (Internet Message Access Protocol)対応およびSMTP (Simple Mail Transfer Protocol)対応のメール・サーバーにJavaアプリケーションからアクセスできます。JavaMailはメール・サーバー機能を持っていないので、JavaMailを使用するにはメール・サーバーが必要です。
JavaMail APIの使用方法に関する詳細なドキュメントは、http://www.oracle.com/technetwork/java/javamail-138606.html
で参照できます。この項では、WebLogic Server環境でJavaMailを使用する方法について説明しています。
weblogic.jar
ファイルには、次のJavaMail APIパッケージが含まれています。
javax.mail
javax.mail.event
javax.mail.internet
javax.mail.search
weblogic.jar
ファイルには、JavaMailで必要なJAF (Java Activation Framework)パッケージも含まれています。
javax.mail
パッケージには、Internet Message Access Protocol (IMAP)およびSimple Mail Transfer Protocol (SMTP)メール・サーバーのプロバイダが含まれています。JavaMail用に独自のPOP3プロバイダがあります。これは、weblogic.jar
には含まれていません。POP3プロバイダは、使用する場合、http://java.sun.com/products/javamail/pop3.html
からダウンロードし、それをWebLogic Serverクラスパスに追加できます。
JavaMailは、システムのメール・トランスポート機能を定義する構成ファイルに依存します。weblogic.jar
ファイルには、標準構成ファイルが入っています。このファイルにより、IMAPおよびSMTPメール・サーバーがJavaMail向けに使用可能になり、JavaMailが処理できるデフォルトのメッセージ・タイプが定義されます。
JavaMailを拡張してサポートされるトランスポート、プロトコル、およびメッセージのタイプを追加する場合を除いて、JavaMail構成ファイルを変更する必要はありません。JavaMailを拡張する場合は、http://java.sun.com/products/javamail/Third_Party.html
を参照してください。次に、拡張したJavaMailパッケージをweblogic.jar
の前のWebLogic Serverクラスパスに追加します。
WebLogic Serverで使用するためにJavaMailを構成するには、WebLogic Server管理コンソールでメール・セッションを作成します。これにより、あらかじめ構成しておくセッション・プロパティを使用して、サーバー側モジュールとアプリケーションでJNDIを用いてJavaMailサービスにアクセスできるようになります。たとえば、メール・セッションを作成すると、メール・ホスト、トランスポートおよび格納プロトコル、デフォルトのメール・ユーザーを管理コンソールで指定できるため、JavaMailを使用するモジュールでこれらのプロパティを設定する必要はありません。メール・セッションは単一のjavax.mail.Session
オブジェクトを作成し、JNDIを通じてそのオブジェクトを必要とするすべてのモジュールで利用できるようにするため、多数の電子メール・ユーザーを持つアプリケーションではメリットが得られます。
管理コンソールによるメール・セッションの使用の詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJavaMailへのアクセスの構成に関する項を参照してください。
メール・セッションで設定したプロパティ・セットは、オーバーライドするプロパティを含むjava.util.Properties
オブジェクトを作成すると、コード内でオーバーライドできます。「JavaMailを使用したメッセージの送信」を参照してください。メール・セッション・オブジェクトをJNDIでルックアップした後、Properties
オブジェクトを使用してSession.getInstance()
メソッドを呼び出し、カスタマイズしたセッションを取得します。
WebLogic Serverモジュール内からJavaMailを使用してメッセージを送信する手順は次のとおりです。
JNDI (ネーミング)、JavaBean Activation、JavaMailパッケージをインポートします。java.util.Properties:
もインポートします。
import java.util.*; import javax.activation.*; import javax.mail.*; import javax.mail.internet.*; import javax.naming.*;
JNDIでメール・セッションを次のようにルックアップします。
InitialContext ic = new InitialContext(); Session session = (Session) ic.lookup("myMailSession");
管理コンソールで設定したセッションのプロパティをオーバーライドする必要がある場合は、java.util.Properties
オブジェクトを作成してオーバーライドするプロパティを追加します。getInstance()
を呼び出して、新しいプロパティの新しいセッション・オブジェクトを取得します。
Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.host", "mailhost"); // use mail address from HTML form for from address props.put("mail.from", emailAddress); Session session2 = session.getInstance(props);
MimeMessage
を作成します。次の例で、to、subject、およびmessageTxtは文字列の変数で、ユーザーが入力した内容が入ります。
Message msg = new MimeMessage(session2); msg.setFrom(); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); msg.setSubject(subject); msg.setSentDate(new Date()); // Content is stored in a MIME multi-part message // with one body part MimeBodyPart mbp = new MimeBodyPart(); mbp.setText(messageTxt); Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp); msg.setContent(mp);
メッセージを送信します。
Transport.send(msg);
JNDIルックアップでは、障害が発生するとNamingException
例外がスローされます。JavaMailでは、トランスポート・クラスの特定またはメール・ホストとの通信に失敗した場合にMessagingException
がスローされます。コードをtryブロックの中に配置し、これらの例外を捕捉するようにしておきます。
JavaMail APIを使用すると、メッセージ・ストアに接続できます。メッセージ・ストアはIMAPサーバーまたはPOP3サーバーとなります。メッセージはフォルダに保存されます。IMAPの場合、メッセージ・フォルダはメール・サーバー上に格納されます。メッセージ・フォルダには、受信したメッセージが入るフォルダとアーカイブされたメッセージが入るフォルダがあります。POP3の場合は、メッセージの到着時にメッセージを保存するフォルダをサーバーが提供します。クライアントは、POP3サーバーに接続するときに、メッセージを取得してクライアントのメッセージ・ストアに転送します。
フォルダは、ディスクのディレクトリと同じような階層構造になっています。フォルダにはメッセージまたは他のフォルダを格納できます。デフォルトのフォルダは構造の最上位にあります。特別なフォルダ名であるINBOXは、ユーザーのプライマリ・フォルダのことを指し、デフォルト・フォルダの内部にあります。受信したメールを読み込むには、ストアからデフォルト・フォルダを取得して、次にデフォルト・フォルダからINBOXフォルダを取得します。
APIでは、指定した数または範囲のメッセージを読み取る、またはメッセージの特定の部分をあらかじめ取り出してフォルダのキャッシュに入れるなど、メッセージの読込みについて複数のオプションを提供しています。詳細は、JavaMail APIを参照してください。
WebLogic Serverモジュール内からPOP3サーバーで受信したメッセージを読み込む手順は次のとおりです。
JNDI (ネーミング)、JavaBean Activation、JavaMailパッケージをインポートします。java.util.Properties:
もインポートします。
import java.util.*; import javax.activation.*; import javax.mail.*; import javax.mail.internet.*; import javax.naming.*;
JNDIでメール・セッションを次のようにルックアップします。
InitialContext ic = new InitialContext(); Session session = (Session) ic.lookup("myMailSession");
管理コンソールで設定したセッションのプロパティをオーバーライドする必要がある場合は、Properties
オブジェクトを作成してオーバーライドするプロパティを追加します。getInstance()
を呼び出して、新しいプロパティの新しいセッション・オブジェクトを取得します。
Properties props = new Properties(); props.put("mail.store.protocol", "pop3"); props.put("mail.pop3.host", "mailhost"); Session session2 = session.getInstance(props);
セッションからStore
オブジェクトを取得し、connect()
メソッドを呼び出してメール・サーバーに接続します。接続の認証を行うには、接続メソッドでメール・ホスト、ユーザー名、およびパスワードを提供する必要があります。
Store store = session.getStore(); store.connect(mailhost, username, password);
デフォルト・フォルダを取得し、そのフォルダを使用してINBOXフォルダを取得します。
Folder folder = store.getDefaultFolder(); folder = folder.getFolder("INBOX");
フォルダ内のメッセージを、メッセージの配列に読み込みます。
Message[] messages = folder.getMessages();
メッセージの配列にあるメッセージを処理します。メッセージ・クラスには、ヘッダー、フラグ、メッセージの内容など、メッセージの様々な部分にアクセスできるメソッドがあります。
IMAPサーバーからのメッセージの読込みは、POP3サーバーからのメッセージの読込みと同様です。ただしIMAPの場合は、フォルダを作成および操作し、フォルダ間でメッセージを転送するメソッドがJavaMail APIで提供されています。IMAPサーバーを使用すると、POP3サーバーを使用する場合よりも少ないコードで、多機能なWebベースのメール・クライアントを実装できます。POP3では、おそらくデータベースまたはフォルダを表すためのファイル・システムを使用して、WebLogic Serverからメッセージ・ストアを管理するコードを記述する必要があります。