ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverアプリケーションの開発
11g リリース1(10.3.6)
B60990-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストヘ移動
製品
目次へ移動
目次

前
 
次
 

12 WebLogic ServerでのJavaMailのプログラミング

次の項では、WebLogic Serverでのプログラミングに関連する、さらなるトピックを説明します。

WebLogic ServerアプリケーションでのJavaMailの使い方の概要

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://java.sun.com/products/javamail/index.htmlで参照できます。この項では、WebLogic Server環境でJavaMailを使用する方法について説明しています。

weblogic.jarファイルには、Sunが提供する次のJavaMail APIパッケージが含まれています。

weblogic.jarファイルには、JavaMailで必要なJAF (Java Activation Framework)パッケージも含まれています。

javax.mailパッケージには、Internet Message Access Protocol (IMAP)およびSimple Mail Transfer Protocol (SMTP)メール・サーバーのプロバイダが含まれています。Sunには、JavaMail用に独自のPOP3プロバイダがあります。これは、weblogic.jarには含まれていません。使用する場合は、SunからそのPOP3プロバイダをダウンロードし、WebLogic Serverのクラスパスに追加できます。

JavaMail構成ファイルについて

JavaMailは、システムのメール・トランスポート機能を定義する構成ファイルに依存します。weblogic.jarファイルには、Sunの標準構成ファイルが入っています。このファイルにより、IMAPおよびSMTPメール・サーバーがJavaMail向けに使用可能になり、JavaMailが処理できるデフォルトのメッセージ・タイプが定義されます。

JavaMailを拡張してサポートされるトランスポート、プロトコル、およびメッセージのタイプを追加する場合を除いて、JavaMail構成ファイルを変更する必要はありません。JavaMailを拡張する場合は、SunからJavaMailをダウンロードして、Sunの拡張追加の手順に従います。次に、拡張したJavaMailパッケージをweblogic.jarの前のWebLogic Serverクラスパスに追加します。

WebLogic Server用のJavaMailの構成

WebLogic Serverで使用するためにJavaMailを構成するには、WebLogic Server管理コンソールでメール・セッションを作成します。これにより、あらかじめ構成しておくセッション・プロパティを使用して、サーバー側モジュールとアプリケーションでJNDIを用いてJavaMailサービスにアクセスできるようになります。たとえば、メール・セッションを作成すると、メール・ホスト、トランスポートおよび格納プロトコル、デフォルトのメール・ユーザーを管理コンソールで指定できるため、JavaMailを使用するモジュールでこれらのプロパティを設定する必要はありません。メール・セッションは単一のjavax.mail.Sessionオブジェクトを作成し、JNDIを通じてそのオブジェクトを必要とするすべてのモジュールで利用できるようにするため、多数の電子メール・ユーザーを持つアプリケーションではメリットが得られます。

管理コンソールによるメール・セッションの使用の詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプJavaMailへのアクセスの構成に関する項を参照してください。

メール・セッションで設定したプロパティ・セットは、オーバーライドするプロパティを含むjava.util.Propertiesオブジェクトを作成すると、コード内でオーバーライドできます。「JavaMailを使用したメッセージの送信」を参照してください。メール・セッション・オブジェクトをJNDIでルックアップした後、Propertiesオブジェクトを使用してSession.getInstance()メソッドを呼び出し、カスタマイズしたセッションを取得します。

JavaMailを使用したメッセージの送信

WebLogic Serverモジュール内からJavaMailを使用してメッセージを送信する手順は次のとおりです。

  1. JNDI (ネーミング)、JavaBean Activation、JavaMailパッケージをインポートします。java.util.Properties:もインポートします。

    import java.util.*;
    import javax.activation.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.naming.*;
    
  2. JNDIでメール・セッションを次のようにルックアップします。

    InitialContext ic = new InitialContext();
    Session session = (Session) ic.lookup("myMailSession");
    
  3. 管理コンソールで設定したセッションのプロパティをオーバーライドする必要がある場合は、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);
    
  4. MimeMessageを作成します。次の例で、tosubject、および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);
    
  5. メッセージを送信します。

    Transport.send(msg);
    

JNDIルックアップでは、障害が発生するとNamingException例外がスローされます。JavaMailでは、トランスポート・クラスの特定またはメール・ホストとの通信に失敗した場合にMessagingExceptionがスローされます。コードをtryブロックの中に配置し、これらの例外を捕捉するようにしておきます。

JavaMailを使用したメッセージの読込み

JavaMail APIを使用すると、メッセージ・ストアに接続できます。メッセージ・ストアはIMAPサーバーまたはPOP3サーバーとなります。メッセージはフォルダに保存されます。IMAPの場合、メッセージ・フォルダはメール・サーバー上に格納されます。メッセージ・フォルダには、受信したメッセージが入るフォルダとアーカイブされたメッセージが入るフォルダがあります。POP3の場合は、メッセージの到着時にメッセージを保存するフォルダをサーバーが提供します。クライアントは、POP3サーバーに接続するときに、メッセージを取得してクライアントのメッセージ・ストアに転送します。

フォルダは、ディスクのディレクトリと同じような階層構造になっています。フォルダにはメッセージまたは他のフォルダを格納できます。デフォルトのフォルダは構造の最上位にあります。特別なフォルダ名であるINBOXは、ユーザーのプライマリ・フォルダのことを指し、デフォルト・フォルダの内部にあります。受信したメールを読み込むには、ストアからデフォルト・フォルダを取得して、次にデフォルト・フォルダからINBOXフォルダを取得します。

APIでは、指定した数または範囲のメッセージを読み取る、またはメッセージの特定の部分をあらかじめ取り出してフォルダのキャッシュに入れるなど、メッセージの読込みについて複数のオプションを提供しています。詳細は、JavaMail APIを参照してください。

WebLogic Serverモジュール内からPOP3サーバーで受信したメッセージを読み込む手順は次のとおりです。

  1. JNDI (ネーミング)、JavaBean Activation、JavaMailパッケージをインポートします。java.util.Properties:もインポートします。

    import java.util.*;
    import javax.activation.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.naming.*;
    
  2. JNDIでメール・セッションを次のようにルックアップします。

    InitialContext ic = new InitialContext();
    Session session = (Session) ic.lookup("myMailSession");
    
  3. 管理コンソールで設定したセッションのプロパティをオーバーライドする必要がある場合は、Propertiesオブジェクトを作成してオーバーライドするプロパティを追加します。getInstance()を呼び出して、新しいプロパティの新しいセッション・オブジェクトを取得します。

    Properties props = new Properties();
    props.put("mail.store.protocol", "pop3");
    props.put("mail.pop3.host", "mailhost");
    Session session2 = session.getInstance(props);
    
  4. セッションからStoreオブジェクトを取得し、connect()メソッドを呼び出してメール・サーバーに接続します。接続の認証を行うには、接続メソッドでメール・ホスト、ユーザー名、およびパスワードを提供する必要があります。

    Store store = session.getStore();
    store.connect(mailhost, username, password);
    
  5. デフォルト・フォルダを取得し、そのフォルダを使用してINBOXフォルダを取得します。

    Folder folder = store.getDefaultFolder();
    folder = folder.getFolder("INBOX");
    
  6. フォルダ内のメッセージを、メッセージの配列に読み込みます。

    Message[] messages = folder.getMessages();
    
  7. メッセージの配列にあるメッセージを処理します。メッセージ・クラスには、ヘッダー、フラグ、メッセージの内容など、メッセージの様々な部分にアクセスできるメソッドがあります。

IMAPサーバーからのメッセージの読込みは、POP3サーバーからのメッセージの読込みと同様です。ただしIMAPの場合は、フォルダを作成および操作し、フォルダ間でメッセージを転送するメソッドがJavaMail APIで提供されています。IMAPサーバーを使用すると、POP3サーバーを使用する場合よりも少ないコードで、多機能なWebベースのメール・クライアントを実装できます。POP3では、おそらくデータベースまたはフォルダを表すためのファイル・システムを使用して、WebLogic Serverからメッセージ・ストアを管理するコードを記述する必要があります。