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; } } }