Javamail From на русском языке, От кого по русски,

 
 
 
Сообщения:9
Добрый день.
Возникла проблема.
Написал прогу которая с почитиы выгружает письма .
Программа не работает, если отправитель на руччком языке.
на пример если значение From='Vasea Pupkin <[email protected]>', то програма работает без ошибок
А если From='Татьяна <[email protected]>', то програма ругается выдает вопросики. Но не навсе эмейлы.

Вызов класса обращение к почте
public class Getemail {
    public static void main(String[] args) {
          String host = "localhost";                
          String user = "[email protected]";
             String pass = "111sdddd";        
             File dir = new File("/home/user/priem_zaiavki_email/");
          try {
           List<Email> emails = IncomingMail.downloadPop3(host, user, pass, downloadDir);
           for ( Email email : emails ) {              
            List<EmailAttachment> attachments = email.attachments;
            for ( EmailAttachment attachment : attachments ) {
            }
           }
          } catch (Exception e) { e.printStackTrace(); }
    }
}


Класс обращение к почте
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeBodyPart;
public class IncomingMail {
    // static String namefile ="";  
     public static List<Email> downloadPop3(String host, String user, String pass, String downloadDir) throws Exception {
      List<Email> emails = new ArrayList<Email>();
      // Create empty properties
      Properties props = new Properties();
      // Get the session
      Session session = Session.getInstance(props, null);
      // Get the store
      Store store = session.getStore("pop3");
      store.connect(host, user, pass);
      // Get folder
      Folder folder = store.getFolder("INBOX");
      folder.open(Folder.READ_WRITE);
      try {
       // Get directory listing
       Message messages[] = folder.getMessages();
       for (int i = 0; i < messages.length; i++) {
        Email email = new Email();
        // from 
        email.from = messages[i].getFrom()[0].toString();
       
        // to list
        Address[] toArray = messages[i] .getRecipients(Message.RecipientType.TO);
        for (Address to : toArray) { email.to.add(to.toString()); }
        // cc list
        Address[] ccArray = null;
        try {
         ccArray = messages[i] .getRecipients(Message.RecipientType.CC);
        } catch (Exception e) { ccArray = null; }
        if (ccArray != null) {
         for (Address c : ccArray) {
          email.cc.add(c.toString());
         }
        }
        // subject
        email.subject = messages[i].getSubject();
        // received date
        if (messages[i].getReceivedDate() != null) {
         email.received = messages[i].getReceivedDate();
        } else {
         email.received = new Date();
        }
        // body and attachments
        email.body = "";
        Object content = messages[i].getContent();
        if (content instanceof java.lang.String) {
         email.body = (String) content;
        } else if (content instanceof Multipart) {
         Multipart mp = (Multipart) content;
         for (int j = 0; j < mp.getCount(); j++) {
          Part part = mp.getBodyPart(j);
          String disposition = part.getDisposition();
          if (disposition == null) {
           MimeBodyPart mbp = (MimeBodyPart) part;
           if (mbp.isMimeType("text/plain")) {
            // Plain
            email.body += (String) mbp.getContent();
           } 
          } else if ((disposition != null) && (disposition.equals(Part.ATTACHMENT) || disposition .equals(Part.INLINE))) {
           // Check if plain
           MimeBodyPart mbp = (MimeBodyPart) part;
           if (mbp.isMimeType("text/plain")) {
            email.body += (String) mbp.getContent();
           } else {
            EmailAttachment attachment = new EmailAttachment();
            attachment.name = decodeName(part.getFileName());
     
          String em=email.from;
    
            File savedir = new File(downloadDir);
            savedir.mkdirs();
            File savefile1 = new File(downloadDir,em+"_"+attachment.name);
            
            File savefile=savefile1;
            String file_s=savefile.toString();    
            if (savefile.exists()){
             // System.out.println("s ("+file_s.substring(0,file_s.length()-4)+") "+savefile);
             file_s=file_s.substring(0,file_s.length()-4)+"$1.xml";
             savefile=new File(file_s);
             if (savefile.exists()){
                 Integer g=file_s.indexOf("$");
                 Integer n=Integer.parseInt(file_s.substring(g+1,file_s.length()-4).trim())+1;             
                  file_s=file_s.substring(0,g)+"$"+n.toString().trim()+".xml";
                  System.out.println(file_s);
                  savefile=new File(file_s);
             }
            }
           
           attachment.path = savefile.getAbsolutePath();
            attachment.size = saveFile(savefile, part);
            email.attachments.add(attachment);
         //   namefile= attachment.path ;
           }
          }
         } // end of multipart for loop 
        } // end messages for loop
              
        emails.add(email);
        // Finally delete the message from the server.
    
   messages[i].setFlag(Flags.Flag.DELETED, true);
      }
       // Close connection
       folder.close(true); // true tells the mail server to expunge deleted messages
       store.close();
      } catch (Exception e) {
       folder.close(true); // true tells the mail server to expunge deleted
       store.close();
       throw e;
      }
      return emails;
     }
     private static String decodeName(String name) throws Exception {
      if (name == null || name.length() == 0) {
       return "unknown";
      }
      String ret = java.net.URLDecoder.decode(name, "UTF-8");
      // also check for a few other things in the string:
      ret = ret.replaceAll("=\\?utf-8\\?q\\?", "");
      ret = ret.replaceAll("\\?=", "");
      ret = ret.replaceAll("=20", " ");
      return ret;
     }
     private static int saveFile(File saveFile, Part part) throws Exception {
        
      BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream(saveFile));
      byte[] buff = new byte[2048];
      InputStream is = part.getInputStream();
      int ret = 0, count = 0;
      while ((ret = is.read(buff)) > 0) {
       bos.write(buff, 0, ret);
       count += ret;
      }
      bos.close();
      is.close();
      return count;
     
         
     }
}
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет