Я пытаюсь отправить html-файл, содержащий некоторое содержимое хинди, используя javamail. Вот скриншот содержимого файла:Hindi html файл, преобразованный в китайский при отправке через javamail
код, я использую для отправки файла в виде:
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.internet.MimeMessage.RecipientType;
import java.util.*;
/**
* Simple Class to send an email using JavaMail API (javax.mail) and Gmail SMTP server
* @author Dunith Dhanushka, [email protected]
* @version 1.0
*/
public class GmailSender {
private static String HOST = "smtp.gmail.com";
private static String USER = "[email protected]";
private static String PASSWORD = "mypassword";
private static String PORT = "465";
private static String FROM = "[email protected]";
private static String TO = "[email protected]";
private static String STARTTLS = "true";
private static String AUTH = "true";
private static String DEBUG = "true";
private static String SOCKET_FACTORY = "javax.net.ssl.SSLSocketFactory";
private static String SUBJECT = "Testing JavaMail API";
private static String TEXT = "Message with attachment from my java application. Just ignore it";
public static synchronized void send() {
//Use Properties object to set environment properties
Properties props = new Properties();
props.put("mail.smtp.host", HOST);
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.user", USER);
props.put("mail.smtp.auth", AUTH);
props.put("mail.smtp.starttls.enable", STARTTLS);
props.put("mail.smtp.debug", DEBUG);
props.put("mail.smtp.socketFactory.port", PORT);
props.put("mail.smtp.socketFactory.class", SOCKET_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
try {
//Obtain the default mail session
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
//Construct the mail message
MimeMessage message = new MimeMessage(session);
message.setText(TEXT);
message.setSubject(SUBJECT);
message.setFrom(new InternetAddress(FROM));
message.addRecipient(RecipientType.TO, new InternetAddress(TO));
//add attachments
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart = new MimeBodyPart();
String file = "filenamewithpath";
String fileName = "attachmentName.html";
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart,"UTF-8");
message.saveChanges();
//Use Transport to deliver the message
Transport transport = session.getTransport("smtp");
transport.connect(HOST, USER, PASSWORD);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
e.getMessage();
}
}
public static void main(String[] args) {
GmailSender.send();
System.out.println("Mail sent successfully!");
}
И очень интересно, что получил это:
Когда Я делаю то же самое из своего веб-браузера, почта получена правильно. Вот детали пристроенной части (мы получаем его, нажав на шоу оригинальный вариант в Gmail почтовый ящик):
Content-Type: text/html; charset=UTF-16BE; name="filename.html"
Content-Disposition: attachment; filename="filaname.html"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hl0znk4d0
Так кодировка «UTF-16BE». Я попытался изменить кодировку на «UTF-16BE» с «UTF-8», но не имеет разницы. Кто-нибудь может мне с этим помочь?