0
Help us understand the problem. What are the problem?

posted at

updated at

【Java初心者】改良版・Commons emailで日本語添付ファイルの文字化け解消

改良版を作ったわけ

以前の記事【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();
    }
}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?