2013-08-31 1 views
0

Я пытаюсь отправить html-файл, содержащий некоторое содержимое хинди, используя javamail. Вот скриншот содержимого файла:Hindi html файл, преобразованный в китайский при отправке через javamail

enter image description here код, я использую для отправки файла в виде:

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!"); 
    } 

И очень интересно, что получил это:

enter image description here Когда Я делаю то же самое из своего веб-браузера, почта получена правильно. Вот детали пристроенной части (мы получаем его, нажав на шоу оригинальный вариант в 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», но не имеет разницы. Кто-нибудь может мне с этим помочь?

ответ

0

Прочитайте this и this и упростите свою программу.

Вы не можете установить кодировку для multipart. Изменение

message.setContent(multipart,"UTF-8"); 

в

message.setContent(multipart); 

Поскольку ваш многочастному содержит только одну часть, вы на самом деле не нужно Мультисекционный вообще, но мы будем игнорировать, что на данный момент.

Предполагается, что файл, который вы прикрепляете, использует кодировку по умолчанию для языка, на котором запущен сервер. Это может быть не «utf-8». На самом деле это может быть «utf-16be». Если файл действительно использует utf-8, попробуйте установить свойство System «mail.mime.charset» в «utf-8».

Смежные вопросы