Javaアプリケーション編
JavaMailでメール送信アプリを作る

山田祥寛
2005/2/8

 さまざまなWebアプリケーションを構築していると、メールと連携した仕掛けが欲しいというケースが出てくると思います。例えば、ECアプリケーションであれば、注文処理を行ったタイミングで商品提供者には注文があった旨を通知することで、定期的にサイトやデータベースを確認しなくても済むようになります。顧客には受注確認通知を送信すれば、注文時にいちいちWebの画面をコピーする必要もなくなります。はたまた、新規商品が追加されたタイミングで、新着情報を希望者にニュース配信するというようなケースもあるかもしれません。

 いわゆる「プル型(自分で情報を収集する)」であるブラウザ・アプリケーションと、「プッシュ型(情報提供者が積極的に情報を配信する)」であるメール・アプリケーションとをうまく連携させることで、よりユーザ・フレンドリーであり、サイト管理者にとっても有益な仕組みを提供することができるのです。

 本稿では、このようなメール・アプリケーションを簡単に構築するためのライブラリ――JavaMailを紹介します。JavaMailを利用することで、SMTP(Simple Mail Transfer Protocol)のような低レベルな通信の手続きをまったく意識することなく、ただ必要なパラメータを与えるだけで、メール送信を実現することができます。

 ここでは、まず固定的なテキストをメール送信してみますが、もちろん、パラメータを編集すれば、ユーザーが入力した内容やデータベースから取得したデータを基に、動的に送信先や本文を編集するようなこともできるでしょう。

 それでは早速、具体的なコードを眺めてみることにしましょう。

■解説

(1)JavaMailライブラリをインストールする

 JavaMailライブラリを利用するには、JavaMailそのものに加えて、JAF(Java Activation Framework)をインストールする必要があります。JavaMail/JAFは、以下のサイトからダウンロードすることが可能です。

 ダウンロードしたjavamail-X.X.zip、jafX_X_X.zip(X.X、X_X_Xはバージョン番号)を解凍し、展開されたフォルダ内にあるmail.jar、activation.jarに対してクラスパスを設定します。

(2)Javaアプリケーションを作成する

 環境の準備が整ったところで、メールを送信するためのJavaアプリケーションを定義してみましょう。

MailTransfer.java
  package to.msn.wings.javatips;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 

public class MailTransfer {
  public static void main(String[] args) {
    Properties objPrp=new Properties();
    objPrp.put("mail.smtp.host","smtp.xxxxx.ne.jp"); // SMTPサーバ名
    objPrp.put("mail.host","smtp.xxxxx.ne.jp"); // 接続するホスト名
    // メールセッションを確立
    Session session=Session.getDefaultInstance(objPrp,null);
    // 送信メッセージを生成
    MimeMessage objMsg=new MimeMessage(session);
    try {
    // 送信先(TOのほか、CCやBCCも設定可能)
      objMsg.setRecipients(Message.RecipientType.TO,"webmaster@wings.msn.to");
    // Fromヘッダ
      InternetAddress objFrm=new InternetAddress("CQW15204@nifty.com","Y.Yamada");

      objMsg.setFrom(objFrm);
    // 件名
objMsg.setSubject("メールテスト","ISO-2022-JP");
       
    // 本文
      objMsg.setText("こんにちは","ISO-2022-JP");
      
    // メール送信
      Transport.send(objMsg); 
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (MessagingException e) {
      e.printStackTrace();
    } 
  }
}

 本サンプルを実行することで、webmaster@wings.msn.toあてに「メールテスト」という件名のメールが送信されるはずです。実際にサンプルコードを動作するに際しては、環境に応じて、該当するヘッダ情報や本文(赤字部分)を変更するようにしてください。また、本TIPSでは、本文、件名などをハードコーディングしていますが、もちろん、ユーザーによる入力やテンプレートなどを利用して、これらを動的に生成することも可能でしょう。

■JavaMailを利用する場合の注意点

 最後にJavaMailでメール送信を行う場合の注意点をいくつか挙げておきます。

(1)日本語はISO-2022-JP(JIS)にエンコード

 メール本文やサブジェクトなどに日本語を含む可能性がある場合には、あらかじめISO-2022-JP(JIS)にエンコードする必要があります。さもないと、受信したメーラ側で文字化けの原因となります。

(2)mail.smtp.host、mail.hostプロパティは双方指定

 mail.smtp.hostプロパティはmail.hostプロパティに優先して認識されるため、2つの値が同一ならば、mail.smtp.hostプロパティを設定するだけでもメール送信は可能です。しかし、mail.hostプロパティは内部的にMessage-IDヘッダを生成するのに利用されます。mail.hostプロパティを明示的に指定していない場合、Message-IDヘッダが正しく生成できない可能性があります。

「Java TIPS」

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード


スキルアップ/キャリアアップ
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! 顧客企業に切られた―― そのときどうする?
【実録】これがITコンサルタントの仕事だ!

  New! 「iPhoneプレゼント」――と思ったら!?
 脅威は、電子メールだけじゃない!

  New! 「会議で何かあったんですか?」番次郎と
“いぶき”に訪れた、さらなるBI奮闘記!

  文書を“コントロールする”という新発想
SaaSでできる 手軽な電子文書対策

  2010年、エネルギーコストはどう変化する
企業が“グリーンIT”を軽視できない理由

  こう書けば、職務経歴書はパワフルになる
プロが伝授する、書類と面接 完璧攻略法

  MyEclipseでスムーズな商品検索を実現!
Ajaxでリアルタイムな検索機能を作ろう

  「あきらめ」は「気づき」のチャンス
よみがえれ 日本企業の誇る“現場の強さ”

  マイクソロフトが投入するハイブリッド型
CRMで、エンドユーザーに「選択の自由」を

  CO2削減宣言??環境対策へ進化する
サーバと管理ソフトウェアとは

  【SOA導入事例】基幹システム再構築
業務のリアルタイム連携で競争力を強化

  これから伸びるコンサルタント分野は何か?
〜エンジニア・キャリア進化論(第3回)〜

  x86サーバなるほど相談室 開設!
その悩み、ペディアくんがお答えします。

  SPECjbb2005にて驚異的な実行速度!
このベンチマークテスト結果を見よ!

  開発で重要な要件定義は、転職でも同じ
プロが教える、転職活動の要件定義とは