Web Application を作成していると受付確認などで E-Mail を送信したく なることがよくあります。自力で SMTP 接続を行ってメールを送信しても いいのですが E-Mail を送信するためのパッケージとしては JavaMail が 有名ですので特に理由がないのなら JavaMail を使用する方がいいでしょう。
「JavaMailの使い方」を参考にして ください。
以下から JavaMail 1.3.1 と JAF 1.0.2 をダウンロードします
javamail-1_3.zip と jaf-1_0_2.zip を c:\java (任意)に展開します。 結果として c:\java\javamail-1.3とc:\java\jaf-1.0.2 というディレクトリが できます。c:\java\javamail-1.3\lib\mailapi.jar と c:\java\javamail-1.3\lib\smtp.jar、および c:\java\jaf-1.0.2\activation.jar を eclipse プロジェクトの WEB-INF/lib にコピーします。
メールを送信するだけなので pop3.jar と imap.jar はコピーしませんでした。 これは使用する SMTP サーバが内部ネットワークに存在しており POP before SMTP を要求しなかったためです。
今回は POP before SMTP などの制限がない SMTP サーバに転送するだけですので まったく難しくありません。サンプルを提示するのみにしておきます。エンコーディング やSMTPホストなどはプロパティファイルにした方がいいでしょうがここではそこまで やっていません。
/**
* メールの送信処理を行います。
*
* @param EntryForm EntryForm ActionFormBean
* @throws Exception なんらかのエラーが発生した場合
*/
protected void mailSender(EntryForm entryForm, String text) throws Exception {
final String ENCODING = "iso-2022-jp";
final String SMTPHOST = SMTPサーバ;
final String FROMADDR = メールアドレス;
final String FROMNAME = 名前;
String email = entryForm.getEmail();
if(!email.endsWith("@ドメイン")) { // ドメインチェック
log.info("email address does not include '@ドメイン'");
return;
}
// Transport クラスで必要
Properties props = new Properties();
props.put("mail.smtp.host", SMTPHOST);
// 送信用 Session を作成
Session session = Session.getDefaultInstance(props);
// デバッグ情報を表示
session.setDebug(true);
try {
// メッセージを作成
MimeMessage mimeMessage = new MimeMessage(session);
// From の設定
mimeMessage.setFrom(new InternetAddress(FROMADDR, FROMNAME, ENCODING));
// To の設定
InternetAddress[] toAddress = {new InternetAddress(entryForm.getEmail())};
mimeMessage.setRecipients(Message.RecipientType.TO, toAddress);
// BCC の設定
InternetAddress[] bccAddress = {new InternetAddress(FROMADDR)};
mimeMessage.setRecipients(Message.RecipientType.BCC, bccAddress);
// タイトルの設定
mimeMessage.setSubject("トレーニング申し込み/修正/取り消し確認:" + entryForm.getCourse(), ENCODING);
// メール形式を設定
mimeMessage.setHeader("Content-Type", "text/plain");
// 本文の設定
mimeMessage.setText(text, ENCODING);
log.info("Subject:" + mimeMessage.getSubject());
Enumeration enum = mimeMessage.getAllHeaders();
while(enum.hasMoreElements()) {
Header header = (Header)enum.nextElement();
log.info(header.getName() + "=" + header.getValue());
}
// Transport で送信する
Transport.send(mimeMessage);
} catch (MessagingException mex) {
log.error(mex.getMessage());
throw mex;
}
}