Файл new1.txt содержит строку UTF-8, которая отправляется как тема. Но полученное письмо покажет строку в формате CP1252. Но если я установил консольную кодировку, выбрав «Запустить Config-> Common Tab» и настройте консольную кодировку как UTF-8, я могу увидеть строку UTF правильно в полученном письме. Я с помощью сервера Google для этого теста:Тема EMail устанавливается в кодировке CP1252, хотя строка находится в UTF-8
Не работает: AE- ¥ 本: Имя партнера:? Ã, ¢ ã,¹ãƒãƒ © ã,¼ãƒ ã, «æ ªå¼ 会社:
Рабочая: 日本: Партнер Имя: ア ス ト ラ ゼ ネ カ 株式会社
Мой код: окончательное строка имя пользователя = "[email protected]"; final String password = "xxxxxx";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username,password);
}
});
try {
File fileDir = new File("c:\\new1.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileDir), "UTF-8"));
String str;
String str1 ="";
while ((str = in.readLine()) != null) {
str1 += str;
}
Message message = new MimeMessage(session);
MimeMultipart mp = new MimeMultipart();
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
message.setSubject(str1);
MimeBodyPart body = new MimeBodyPart();
body.setContent("This is a Test EMail. Please ignore", "text/html");
body.setDisposition(MimeBodyPart.INLINE);
mp.addBodyPart(body);
byte[] attachmentData = str1.getBytes();
DataHandler dh = new DataHandler(new ByteArrayDataSource(attachmentData,"application/octet-stream"));
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(dh);
attachment.setDisposition(MimeBodyPart.ATTACHMENT);
attachment.setFileName("new1.txt");
mp.addBodyPart(attachment);
message.setContent(mp);
Transport.send(message);
System.out.println("Done");
благодаря Мадху
Ниже приведены изменения кода, которые я сделал в моем J2EE приложение. В этом добавляется 3 файла в виде вложений. Одним из трех файлов является сам предмет. В прикрепленном (Subject.txt) согласии отлично.
MimeMessage message = new MimeMessage(s);
....
message.setSubject(subject,"UTF-8");// MimeUtility.encodeText(subject,"UTF-8", "B"));
...
MimeBodyPart body = new MimeBodyPart();
body.setContent(sm.getMailBody(), "text/html; charset=UTF-8");
body.setDisposition(MimeBodyPart.INLINE);
mp.addBodyPart(body);
The debug message. I could not add it as text
Спасибо за решение. Это решение сработало. Но это моя тестовая программа. Это решение не работает в моем приложении J2EE. В этом приложении я использую sendmail, поскольку почтовый сервер в приложении Aix и J2EE запущен на WebPhere Process Server 7.0. –
Можете ли вы описать различия? Возможно, вам понадобится так настроить props.put («mail.debug», «true»); и захватить вывод и отредактировать ваш вопрос - это будет содержать необработанные данные сообщения и поле закодированного заголовка, которое сломано – Jan
Это сообщение об отладке: –