1 -22 : JavaMail サンプル(文字化け完全対策)

JavaMailでPC,携帯,PHS宛てにメールを送信すると、環境によって文字化けすることが多々あります。そのような場合は Content-Transfer-Encoding に 7bit を指定すると全端末で正常に表示してくれます。(場合によっては Shift_JIS への変換も必要ですが)

●JavaMail 文字化け完全対策サンプル(JavaMail1.4 で確認済み)

private static void transport(MailConfig account, String to, String cc, String bcc,
String subject, String body) throws MessagingException, UnsupportedEncodingException {
Properties props = System.getProperties();
// SMTPサーバーのアドレスを指定
props.put("mail.smtp.host", account.getMailSmtp());
props.put("mail.host", account.getMailSmtp());
props.put("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props, null);
MimeMessage mimeMessage = new MimeMessage(session);

// 送信元メールアドレスと送信者名を指定
mimeMessage.setFrom(new InternetAddress(account.getMailEmail(), account.getMailName(),
"iso-2022-jp"));
// 送信先メールアドレスを指定
mimeMessage.setRecipients(Message.RecipientType.TO, to);

if (cc != null && cc.length() > 0) {
mimeMessage.setRecipients(Message.RecipientType.CC, cc);
}
if (bcc != null && bcc.length() > 0) {
mimeMessage.setRecipients(Message.RecipientType.BCC, bcc);
}

// メールのタイトルを指定
mimeMessage.setSubject(subject, "ISO-2022-JP");

// 本文を指定
mimeMessage.setText(body + "\n", "ISO-2022-JP");

// メールの形式を指定
mimeMessage.setHeader("Content-Type", "text/html; charset=\"iso-2022-jp\"");
mimeMessage.setHeader("Content-Transfer-Encoding", "7bit"); // PHS,携帯用文字化け対策

// 送信日付を指定
mimeMessage.setSentDate(new Date());

// 送信します
if (account.isMailUseSmtpAuth()) {
// SMTP認証版
javax.mail.Transport tp = session.getTransport("smtp");
tp.connect(account.getMailSmtp(), account.getMailAccount(), account.getMailPasswordLH());
InternetAddress[] tos = { new InternetAddress(to) };
tp.sendMessage(mimeMessage, tos);

} else {
Transport.send(mimeMessage);
}

}