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

posted at

updated at

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

こちらの記事は改良版があります。そちらをご覧ください。

Commons-emailで簡単メール送信

Javaでメール送信するとなるとJavaMailですが、結構設定が多くて面倒になります。

私が利用しているのはcommons-email (https://commons.apache.org/proper/commons-email/ ) 。

ただ、日本語の添付ファイルをどうやったら文字化けしないように送信できるかにはまりました。

解決案

package mailrectest;

import javax.mail.internet.MimeUtility;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;

public class SendMailWithAttachFile {

    public static void main(String[] args) {
        try {
            // System.setProperty("mail.mime.encodefilename", "true");
            // System.setProperty("mail.mime.charset", "ISO-2022-JP");

            // 添付1
            EmailAttachment attach1 = new EmailAttachment();
            String name = "/home/XXXXXX/日本語のファイル名.pdf";
            attach1.setPath(name);
            attach1.setDisposition(EmailAttachment.ATTACHMENT);
            String name1 = MimeUtility.encodeText("日本語のファイル名.pdf");
            attach1.setName(name1);

            //添付2
            EmailAttachment attach2 = new EmailAttachment();
            attach2.setPath("/home/XXXXXX/次のファイル.pdf");
            attach2.setDisposition(EmailAttachment.ATTACHMENT);
            attach2.setName("次のファイル.pdf");

            MultiPartEmail email = new MultiPartEmail();
            email.setHostName("<SMTPサーバー>");
            email.setSmtpPort(<SMTPサーバーのポート>);
            email.setStartTLSEnabled(true);
            email.setAuthentication("<SMTPのID>", "<SMTPパスワード>");

            email.setFrom("<差出人>");
            String subject = MimeUtility.encodeText("<タイトル>".strip(), "iso-2022-jp", "B");
            subject = MimeUtility.unfold(subject);
            email.setSubject(subject);
            email.setMsg("<本文>");

            String[] listTOs = {"<送信先1>","<送信先2>"};
            for (String listTO : listTOs) {
                email.addTo(listTO);
            }
            //ファイルを添付
            email.attach(attach1);
            email.attach(attach2);

            // email.setDebug(true);
            email.send();

        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0
Help us understand the problem. What are the problem?