改良版を作ったわけ
以前の記事【Java初心者】Commons emailで日本語添付ファイルの文字化け解消では、添付ファイルの文字化けが発生しないことを確認していたのですが、差出人やタイトルの文字化けが発生することがありました。
環境変数に頼っていたことが原因かもしれないと思いまして、JavaMailやCommons emailに備わっていたメソッドを利用する方法を試したところ、目的を達成することができました。
package mailsendtest;
import java.io.UnsupportedEncodingException;
import javax.mail.internet.MimeUtility;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
public class MailSendTest1 {
public static void main(String[] args) throws EmailException, UnsupportedEncodingException {
// 添付1
EmailAttachment attach1 = new EmailAttachment();
String name = "/home/XXXXXX/日本語のファイル名.pdf";
attach1.setPath(name);
attach1.setDisposition(EmailAttachment.ATTACHMENT);
// 以下の1行は、添付ファイル名から変更してもいい。拡張子はあったほうが無難
attach1.setDescription("日本語の添付ファイル.pdf");
// attach1.setName(((new File(name)).getName())); // これでもOK
MultiPartEmail email = new MultiPartEmail();
email.setHostName("<SMTPサーバー>");
email.setSmtpPort(<SMTPサーバーのポート>);
String from = "XXX@XXXXX.jp"; // 差出人のメールアドレス
email.setFrom(from, "日本語の名前");
String subject = "タイトル";
subject = MimeUtility.encodeText(subject.strip(), "iso-2022-jp", "B");
email.setSubject(MimeUtility.unfold(subject));
String msgText = "メールの本文";
email.setMsg(msgText);
String to = "XXXXXXXXX@XXXX.or.jp,AAAAA@AAAAA.jp"; // 宛先
String[] listTOs = to.split(",");
for (String listTO : listTOs) {
email.addTo(MimeUtility.encodeText(listTO.strip(), "iso-2022-jp", "B"));
}
// SMTPがTLSの場合
email.setStartTLSEnabled(true);
String id = "<SMTP認証のID>";
String pwd = "<SMTP認証のパスワード>";
email.setAuthentication(id, pwd);
email.attach(attach1);
email.send();
}
}