サンプルプログラムのテスト

広告

ではJavaMailに元々含まれているサンプルプログラムを見ながら仕組みを確認していきたいと思います。まずは試してみましょう。

(JavaMailをインストールしたディレクトリ)¥demo¥msgsendsample.javaを使います。中身を見てみると、

import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class msgsendsample{
  static String msgText = "This is a message body.¥nHere's the second line.";

  public static void main(String[] args){
    if (args.length != 4){
      usage();
      System.exit(1);
    }

    System.out.println();

    String to = args[0];
    String from = args[1];
    String host = args[2];
    boolean debug = Boolean.valueOf(args[3]).booleanValue();

    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    if (debug){
      props.put("mail.debug", args[3]);
    }

    Session session = Session.getInstance(props, null);
    session.setDebug(debug);
    
    try{
      Message msg = new MimeMessage(session);
      msg.setFrom(new InternetAddress(from));
      InternetAddress[] address = {new InternetAddress(args[0])};
      msg.setRecipients(Message.RecipientType.TO, address);
      msg.setSubject("JavaMail APIs Test");
      msg.setSentDate(new Date());
      msg.setText(msgText);

      Transport.send(msg);
    }catch(MessagingException mex){
      System.out.println("¥n--Exception handling in msgsendsample.java");
      mex.printStackTrace();
    }
  }

  private static void usage(){
    System.out.println("usage: java msgsendsample <to> <from> <smtp> true|false");
  }
}

※上記はコメント行及び例外処理の部分をかなり省いています。

たったこれだけのコードでメール送信が可能となります。ではコンパイルして実行してみましょう。

D:¥test¥javamail>set CLASSPATH=%CLASSPATH%;D:¥Program Files¥Java¥javamail-1.3.2¥
mail.jar;.

D:¥test¥javamail>set CLASSPATH=%CLASSPATH%;D:¥Program Files¥Java¥jaf-1.0.2¥activ
ation.jar

D:¥test¥javamail>javac msgsendsample.java

D:¥test¥javamail>

コンパイルは上記のようになります(クラスパスの設定を忘れないようにして下さい)。無事成功したら下記のように実行して下さい。

D:¥test¥javamail>java msgsendsample
usage: java msgsendsample <to> <from> <smtp> true|false

D:¥test¥javamail>

引数を指定しないで実行すると、上記のようにUSAGEが表示されます。引数としては4つ必要で、

to         : メール送信先
from       : メール送信元
smtp       : SMTPサーバ名
true|false : デバックモードにするかどうか

では引数を指定して試してみましょう。

D:¥test¥javamail>java msgsendsample to@example.jp from@example.jp smtp.example.jp false

D:¥test¥javamail>

※smtp.example.comの所にはSMTPサーバ名を指定して下さい。

無事下記のようなメールが届きましたでしょうか。

Date: Sun, 8 May 2005 14:40:38 +0900 (JST)
From: from@example.jp
To: to@example.jp
Subject: JavaMail APIs Test
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

This is a message body.
Here's the second line.

Message-IDに不正な値が入っている場合

実はサンプルのままですと、Message-IDに変な値が入っていて、Becky!で読み込むと不正なメールですのような表示が出てしまってました。その場合はサンプルのコードを下記のようにして下さい。

Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.host", host);     /* 追加 */
props.put("mail.from", from);     /* 追加 */
if (debug){
  props.put("mail.debug", args[3]);
}

上記二つを設定するとMessage-IDに適正な値が入るようになりました。

( Written by Tatsuo Ikura )