2013-03-18 7 views
0

Мне нужно сохранить вложение электронной почты в utf8. Стараюсь этот код, но есть еще какой-то символ отсутствует:Как сохранить вложения электронной почты в utf8

public static void main(String args[]) throws Exception { 
    File emlFile = new File("example.eml"); 

    InputStream source; 

    source = new FileInputStream(emlFile); 

    MimeMessage message = new MimeMessage(null, source); 

    Multipart multipart = (Multipart) message.getContent(); 

    for (int x = 0; x < multipart.getCount(); x++) { 

     BodyPart bodyPart = multipart.getBodyPart(x); 
     String disposition = bodyPart.getDisposition(); 

     if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) { 
      System.out.println("Mail have some attachment : "); 

      DataHandler handler = bodyPart.getDataHandler(); 
      System.out.println("file name : " + handler.getName()); 


      //start reading inpustream from attachment 
      InputStream is = bodyPart.getInputStream(); 
      File f = new File(bodyPart.getFileName()); 
      OutputStreamWriter sout = new OutputStreamWriter(new FileOutputStream(f), "UTF8"); 
      BufferedWriter buff_out = new BufferedWriter(sout); 
      int bytesRead; 
      while ((bytesRead = is.read()) != -1) { 
       buff_out.write(bytesRead); 
      } 
      buff_out.close(); 

     } 
    } 
} 
+0

Что такое контент/кодировка вложения? –

+0

, когда я открываю файл eml в txt-редакторе, я вижу только: Content-Transfer-Encoding: base64, поэтому нет кодировки. – hudi

ответ

1

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

Если вложение содержит необработанные байты, нет смысла кодировать вывод UTF и вы можете работать с необработанными потоками.

Если он содержит текст, вы также захотите прочитать вложение как текст вместо необработанных байтов и использовать кодировку для чтения и записи.

В последнем случае что-то вроде;

InputStream is = bodyPart.getInputStream(); 
InputStreamReader sin = new InputStreamReader(is, 
               "UTF8"); // <-- attachment charset 

File f = new File(bodyPart.getFileName()); 
OutputStreamWriter sout = new OutputStreamWriter(new FileOutputStream(f), "UTF8"); 
BufferedReader buff_in = new BufferedReader(sin); 
BufferedWriter buff_out = new BufferedWriter(sout); 

int charRead; 
while ((charRead = buff_in.read()) != -1) { 
    buff_out.write(charRead); 
} 

buff_in.close(); 
buff_out.close(); 
Смежные вопросы