JavaMailを使ってみた
JavaMailを使ってみた。
目的
以下について、具体的なイメージを掴むこと。
- 何が必要か
- 実装イメージ
- 何が設定できるか
環境
- WindowsXP SP3
- JavaSE1.5
- tomcat6.0.14
- 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の指定より優先。 |
メッセージ
設定するもの | メソッド | 備考 | |
---|---|---|---|
宛先 | 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) |
※全部ではないので注意。随時追記していくつもり。
フラグ(※1に対応するもの)
意味 | 定数名 |
---|---|
返信済 | ANSWERED |
削除マークが付けられた | DELETED |
下書き | DRAFT |
フラグが付けられた | FLAGGED |
新着 | RECENT |
読まれた | SEEN |
ユーザ定義フラグ? | USER |