【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷


   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」

ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

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

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています