Debe usar setSubject(String subject, String charset) que es una función conveniente para este propósito.
Session session=Session.getDefaultInstance(new Properties());
MimeMessage mimeMsg= new MimeMessage(session);
String subject="Herr Müller reist nach \u0141\u00f3d\u017a.";
mimeMsg.setSubject(subject,"utf-8");
System.out.println(subject);
System.out.println(mimeMsg.getHeader("Subject")[0]);
En MimeUtility se dice:
Hay un conjunto de métodos para codificar y decodificar las cabeceras MIME según RFC 2047. Nótese que, en general, estos métodos no son necesarios cuando se utilizan métodos como setSubject y setRecipients; JavaMail codificará y decodificará datos automáticamente al usar estos métodos de "nivel superior". Los métodos a continuación solo son necesarios para maniuplar encabezados MIME en bruto utilizando los métodos setHeader y getHeader.
Desde mi punto de vista, Message.setSubject
debe ser el punto de entrada para este fin.
Aparece el cp1252
en la codificación del asunto, porque es la codificación estándar en su plataforma.
Su ejemplo publicado es el "resultado" de
mail.setSubject(MimeUtility.encodeText(subject, "cp1252", "Q"));`
Mi MimeMessage no tiene setSubject (String, String) interesante. Tal vez estoy usando una versión anterior de Javamail. gracias de cualquier manera. –
Debe ser un javamail muy antiguo, porque incluso [MimeMessage en la Versión 1.1] [1] del año 1999 lo tiene. ;-) [1]: https://www.cs.auckland.ac.nz/references/java/javamail/javax/mail/internet/MimeMessage.html –
El mensaje no contiene setSubject (String, String) mientras que MimeMessage lo hace. –