Поддержка символов Umlaut в java mailapi - PullRequest
0 голосов
/ 26 апреля 2018
MimeBodyPart mimebodypart = new MimeBodyPart();
DataSource datasource = new FileDataSource(file);
mimebodypart.setDataHandler(new DataHandler(datasource));
//mimebodypart.setFileName(MimeUtility.encodeText(file.getName(), "UTF-8", null));
mimebodypart.setFileName(file.getName());

В приведенном выше коде у меня есть имя файла PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff Вложение приходит как untitled_000000456.tiff <000000456> - это случайное число, которое отображается.

Использование stöäüßÜÄÖ работает нормально, но когда строка имеет длину еще один символ, т.е. e stöäüßÜÄÖ , она не работает.

Также работают öäüßÜÄÖöäüßÜÄÖ и testtesttest (любой длины).

Может ли кто-нибудь указать, что я делаю неправильно?

Я использую JAR JavaMail API »1.5.6

https://mvnrepository.com/artifact/javax.mail/javax.mail-api/1.5.6

Java Версия 1.8

РЕДАКТИРОВАТЬ

После некоторых заголовков я могу получить правильное имя файла, но тело сообщения отсутствует.Вот обновленный код.

try {
    Message message = new MimeMessage(Session.getInstance(System.getProperties()));
    message.setHeader("MIME-Version", "1.0");
    message.setHeader("Content-Disposition", "attachment; filename=\""+ file.getName() +"\""); 
    //file.getName() returns PDF "testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff"
    message.saveChanges();

    String email_subject = "subject";
    message.setSubject(email_subject, "UTF-8", null));
    message.setSentDate(new Date());

    MimeBodyPart content = new MimeBodyPart();
    String msg_body = "Message body";
    content.setContent("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "text/html;charset=UTF-8");
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(content);



    MimeBodyPart attachment = new MimeBodyPart();
    DataSource source = new FileDataSource(file); //file is of type File 
    attachment.setDataHandler(new DataHandler(source));
    multipart.addBodyPart(attachment);

    message.setContent(multipart);
    message.getFlags().add(Flags.Flag.DRAFT);

    OutputStream out = new FileOutputStream(fileName);
    //fileName.getName() returns PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.eml
    message.writeTo(out);
    out.close();
    out=null;
}catch (Exception ex) {
    ex.printStackTrace();
}

Что я делаю не так, что тело отсутствует?

1 Ответ

0 голосов
/ 03 мая 2018

Попробуйте эту более простую и правильную версию:

Message message = new MimeMessage(Session.getInstance(System.getProperties()));

String email_subject = "subject";
message.setSubject(email_subject, "UTF-8");
message.setSentDate(new Date());

MimeBodyPart content = new MimeBodyPart();
String msg_body = "Message body";
content.setText("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "UTF-8", "html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(content);

MimeBodyPart attachment = new MimeBodyPart();
attachment.attachFile(file);
multipart.addBodyPart(attachment);

message.setContent(multipart);
message.setFlags(new Flags(Flags.Flag.DRAFT), true);

OutputStream out = new FileOutputStream(fileName);
message.saveChanges();
message.writeTo(out);
out.close();

Если это не сработает, опубликуйте содержимое файла, на который ссылается fileName.

...