JavaMailを使ってみた

JavaMailを使ってみた。

目的

以下について、具体的なイメージを掴むこと。

  • 何が必要か
  • 実装イメージ
  • 何が設定できるか

環境

  • JavaMail 1.4.1 (2007/10/22 released)
  • JAF(JavaBeans Activation Framework) 1.1.1 (2007/10/22 released)

何が必要か

ライブラリを入手する
  • JavaMail
  • JAF(JavaBeans Activation Framework)
    • JavaSE1.5を使用しているため。JavaSE1.6を使用している場合は、javax.activation パッケージが含まれているので不要。
    • なお、当ライブラリは JavaSE 1.4 以上が前提。つまり、1.4 〜 1.5 の場合に使う。

ダウンロードしたZIPファイルを解凍し、jarファイルを入手する。

ライブラリを追加

解凍して入手したライブラリをクラスパスに配置する。
といいつつ、NetBeans6.1を使っているので、「ライブラリ」-「JAR/フォルダを追加」でjarを追加した。

  • mail.jar
  • activation.jar

実装イメージ

参考:APIドキュメント
1.システムのプロパティにSMTPサーバを指定し、セッションに詰める
2.メッセージに宛先などを指定
3.Transportクラスを使用して送信



import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaMailTest {

public static void send() {
Properties props = System.getProperties();
// SMTPサーバーを指定
props.put("mail.smtp.host", "smtp.xxx.xx.xx");
Session session = Session.getDefaultInstance(props, null);

try {
MimeMessage msg = new MimeMessage(session);
// 送信元メールアドレスと送信者名を指定
msg.setFrom(new InternetAddress("xxx@xxx", "てすと", "iso-2022-jp"));
// 送信先メールアドレスを指定
msg.setRecipients(Message.RecipientType.TO, "xxx@xxx");
// メールのタイトルを指定
msg.setSubject("こんにちは、JavaMail", "iso-2022-jp");
// メールの内容を指定
msg.setText("こんにちは、JavaMail!\nいろいろ試してくださいね!\n", "iso-2022-jp");
// 送信します
Transport.send(msg);
} catch (UnsupportedEncodingException uex) {
System.out.println("send failed, exception: " + uex);
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}

}

何が設定できるか

APIドキュメントから拾い集めたもの。

プロパティ
プロパティ名 Type 説明
mail.debug boolean 初期のデバッグモード。デフォルトはfalse
mail.from String 現ユーザの返信先Emailアドレス。InternetAddressクラスのgetLocalAddressメソッドはここで設定した値を返す。
mail.mime.address.strict boolean The MimeMessage class uses the InternetAddress method parseHeader to parse headers in messages. This property controls the strict flag passed to the parseHeader method. デフォルトはtrue。
mail.host String Stores と Transportsで使用するデフォルトのホスト名。 mail.protocol.hostが設定されていない場合に使用される。
mail.store.protocol String デフォルトメッセージアクセス・プロトコルを指定する。 SessionメソッドgetStore()はこのプロトコルを実装するストアオブジェクトを返す。 デフォルトで、構成ファイルにおける最初のストアプロバイダーを返す。
mail.transport.protocol String デフォルトメッセージアクセス・プロトコルを指定する。SessionメソッドgetTransport()はこのプロトコルを実装するTransportオブジェクトを返す。デフォルトで、構成ファイルにおける最初のTransportプロバイダーを返す。
mail.user String メールサーバへの接続ユーザ名。mail.protocol.userが設定されていない場合に使用される。
mail.protocol.class String プロトコルを提供するクラス名(フル修飾)。そのプロトコルを実現するクラスが複数ある場合に、デフォルトで使用するクラスを指定する。この場合、構成ファイルにプロバイダのリストを定義する必要がある。
mail.protocol.host String メールサーバのホスト名。mail.hostの指定より優先。
例)mail.smtp.host
mail.protocol.port int メールサーバのポート番号です。指定しない場合、デフォルトポート番号が使用される。
mail.protocol.user String メールサーバへの接続ユーザ名。mail.userの指定より優先。

参考:JavaMail API documentation

メッセージ

設定するものメソッド備考
宛先 1件設定setRecipient(Message.RecipientType type, Address address) 
複数設定setRecipients(Message.RecipientType type, Address addresses) 
1件追加addRecipient(Message.RecipientType type, Address address) 
複数追加addRecipients(Message.RecipientType type,Address addresses) 
差出人(備考参照)setFrom()"mail.user"の値を使用する。設定されていない場合は、システムプロパティの"user.name"を使用する。
1件設定setFrom(Address address) 
複数追加addFrom(Address addresses) 
返信先 複数設定setReplyTo(Address addresses) 
送信日setSentDate(java.util.Date date)  
件名charset指定なしsetSubject(java.lang.String subject) 
charset指定ありsetSubject(java.lang.String subject, java.lang.String charset) 
本文charset指定なしsetText(java.lang.String text)MIME type of "text/plain"が付加される
charset指定ありsetText(java.lang.String text, java.lang.String charset)
charsetとMineサブタイプ指定ありsetText(java.lang.String text, java.lang.String charset, java.lang.String subtype)
メッセージ番号setMessageNumber(int msgnum) 
フラグ(※1)setFlag(Flags.Flag flag, boolean set) 
setFlags(Flags flag, boolean set) 
消去フラグ???setExpunged(boolean expunged) 
参考:javax.mail.internet.MimeMessage extends MessageのAPIドキュメント
※全部ではないので注意。随時追記していくつもり。

フラグ(※1に対応するもの)
意味 定数名
返信済 ANSWERED
削除マークが付けられた DELETED
下書き DRAFT
フラグが付けられた FLAGGED
新着 RECENT
読まれた SEEN
ユーザ定義フラグ? USER

参考:javax.mail.Flags.Flag(javax.mail.Flagsの内部クラス)のAPIドキュメント