import java.io.File;
import java.util.Date;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
*Mail
クラスは、メールを送信するメソッドのみを実装したクラスです。
*@author junmix
*@version 1.0
*/
public class Mail {
/**
*Mail
クラスのインスタンスを生成します。
*/
public Mail() {
}
/**
*メール送信を行います。
*@param sAddressTo 送信先Toアドレス(カンマ区切りで複数記述可)
*@param sAddressCc 送信先Ccアドレス(カンマ区切りで複数記述可)
*@param sAddressBcc 送信先Bccアドレス(カンマ区切りで複数記述可)
*@param sNameTo 送信先名前
*@param sAddressFrom 送信元アドレス
*@param sNameFrom 送信元名前
*@param sSubject 件名
*@param sText 本文
*@param farAttachFile 添付ファイル
*@param sSMTP_HOST SMTPホスト
*@throws Exception 例外が発生した場合にスローされる
*/
public void sendMail(String sAddressTo,
String sAddressCc,
String sAddressBcc,
String sNameTo,
String sAddressFrom,
String sNameFrom,
String sSubject,
String sText,
File[] farAttachFile,
String sSMTP_HOST) throws Exception {
try {
// システムプロパティ
Properties ps = System.getProperties();
// SMTPサーバーのアドレスを設定
ps.put("mail.smtp.host", sSMTP_HOST);
// デフォルトのセッションオブジェクトを取得
Session session = Session.getDefaultInstance(ps, null);
// インスタンス生成
MimeMessage mimeMessage = new MimeMessage(session);
// マルチパート領域の設定
MimeBodyPart mbpMailBody = new MimeBodyPart();
// 送信元アドレスと送信元名前を設定
mimeMessage.setFrom(new InternetAddress(sAddressFrom, sNameFrom, "iso-2022-jp"));
// 送信先Toアドレスの数を取得してアドレスに設定
StringTokenizer stkTo = new StringTokenizer(sAddressTo, ",");
InternetAddress[] internetAddressTo = new InternetAddress[stkTo.countTokens()];
for (int i = 0; stkTo.hasMoreTokens(); i++) {
// 送信先Toアドレスと送信先名前を設定
internetAddressTo[i] = new InternetAddress(stkTo.nextToken(), sNameTo, "iso-2022-jp");
}
mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
// 送信先Ccアドレスの数を取得してアドレスに設定
StringTokenizer stkCc = new StringTokenizer(sAddressCc, ",");
InternetAddress[] internetAddressCc = new InternetAddress[stkCc.countTokens()];
for (int i = 0; stkCc.hasMoreTokens(); i++) {
// 送信先Ccアドレスと送信先名前を設定
internetAddressCc[i] = new InternetAddress(stkCc.nextToken(), sNameTo, "iso-2022-jp");
}
mimeMessage.setRecipients(Message.RecipientType.CC, internetAddressCc);
// 送信先Bccアドレスの数を取得してアドレスに設定
StringTokenizer stkBcc = new StringTokenizer(sAddressBcc, ",");
InternetAddress[] internetAddressBcc = new InternetAddress[stkBcc.countTokens()];
for (int i = 0; stkBcc.hasMoreTokens(); i++) {
// 送信先Bccアドレスと送信先名前を設定
internetAddressBcc[i] = new InternetAddress(stkBcc.nextToken(), sNameTo, "iso-2022-jp");
}
mimeMessage.setRecipients(Message.RecipientType.BCC, internetAddressBcc);
// 件名を設定
mimeMessage.setSubject(sSubject, "iso-2022-jp");
// マルチパートの領域に本文を設定
mbpMailBody.setText(sText, "iso-2022-jp");
// マルチパート格納用
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbpMailBody);
// 添付ファイルの設定数ループ
for (int i = 0; i < farAttachFile.length; i++) {
// 未設定の場合は処理を飛ばす
if (farAttachFile[i] == null) {
continue;
}
// 対象がファイルであり、かつ存在する場合
if (farAttachFile[i].isFile() && farAttachFile[i].exists()) {
// 添付ファイル設定用
FileDataSource fds = new FileDataSource(farAttachFile[i].getCanonicalPath());
// マルチパート領域の設定
MimeBodyPart mbpAttachedFile = new MimeBodyPart();
// マルチパートの領域に添付ファイルをセット
mbpAttachedFile.setDataHandler(new DataHandler(fds));
mbpAttachedFile.setFileName(MimeUtility.encodeWord(fds.getName()));
mp.addBodyPart(mbpAttachedFile);
}
}
// 複数のマルチパートの領域をセット
mimeMessage.setContent(mp);
// 送信日付を設定
mimeMessage.setSentDate(new Date());
// メール送信を実行
javax.mail.Transport.send(mimeMessage);
} catch (Exception e) {
throw e;
}
}
}