Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    JavaMail e multipart

    Ciao ho un 'applicazione dove utilizzo il framework javamail per scaricare la posta, funziona tutto, la scarico, compreso gli allegati , però ho un problema legato alle mail multipart, in quanto non riesco a trovare un modo per separare bene il contenuto dai vari header , in modo da poter poi visualizzare solo il testo (indifferentemente dal fatto che sia html o altro).
    Non vorrei mettermi a tirar fuori tutto con le espressioni regolari , ,mi sembra una soluzione un po 'ambigua'.

    Riporto il codice scritto ...

    codice:
     private void scaricaMessaggi() {
                String h = host;
                String u = myuser;
                String p = mypassword;
                try{
                    Properties prop = System.getProperties();
                    Session sessione = Session.getInstance(prop,null);
                    Store store = sessione.getStore("pop3");
                    store.connect(h,u,p);
                    Folder fold = store.getDefaultFolder();
                    if(fold != null){
                        fold = fold.getFolder("INBOX");
                        fold.open(Folder.READ_ONLY);
                        Message[] msg = fold.getMessages();
                        for(int i = 0; i < msg.length; i++){
                            Message messaggio = msg[i];
                            apriMessaggio(messaggio,i);
                            System.out.println("-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-");
                        }
                    }
                    else{
                        JOptionPane.showMessageDialog(null,"Folder non trovata !!!");
                    }
                }
                catch(Exception e){
                    JOptionPane.showMessageDialog(null,e.getMessage());
                }
            }       
    
        
        private void apriMessaggio(Message messaggio, int i) {
            Part part = messaggio;
            try {
                Object contenuto = part.getContent();
                if(contenuto instanceof Multipart){
                    Multipart mpart = (Multipart)contenuto;
                    System.out.println("MULTIPART-MAIL");
                    System.out.println("MITTENTE : " + messaggio.getFrom()[0]);
                    System.out.println("DATA : " + messaggio.getSentDate());
                    System.out.println("OGGETTO : " + messaggio.getSubject());
                    System.out.println("TESTO : ");
                    for(int p = 0; p < mpart.getCount(); p++){
                        InputStream input = messaggio.getInputStream();
                        BufferedReader r = new BufferedReader(new InputStreamReader(input));
                        String line ;
                        while((line = r.readLine())!=null){
                            System.out.println(line);
                        }
                        part = mpart.getBodyPart(p);
                        String fname = part.getFileName();
                        String disposition = part.getDisposition();
                        if((fname!=null)&&(disposition!=null)){
                            FileOutputStream writer = new FileOutputStream("mail//"+fname);
                            byte[] buffer = new byte[4096];
                            InputStream in = part.getInputStream();
                            while(true) {
                               int readed = in.read( buffer );
                               if( readed == -1 ) {
                                   break;
                               }
                               writer.write( buffer, 0, readed );
                               writer.close();
                            }
                            in.close();
                            System.out.println("Salvato il file " + fname );
                        }
                    }
                }
                else{
                    System.out.println("MAIL TESTO");
                    System.out.println("MITTENTE : " + messaggio.getFrom()[0]);
                    System.out.println("DATA : " + messaggio.getSentDate());
                    System.out.println("OGGETTO : " + messaggio.getSubject());
                    System.out.println("TESTO : ");
                    InputStream input = messaggio.getInputStream();
                    BufferedReader r = new BufferedReader(new InputStreamReader(input));
                    String line ;
                    while((line = r.readLine())!=null){
                        System.out.println(line);
                    }
                }
            } catch (MessagingException ex) {
                JOptionPane.showMessageDialog(null,ex.getMessage());
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null,ex.getMessage());
            }
        }
    Quacuno ha qualche idea in proposito ?

    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

  2. #2
    ...Mi aspettavo qualche risposta in + ....
    Comunque dopo numerosi tentativi mi sono avvicinato molto alla soluzione, ma senza risovere del tutto...
    Ho fatto una modifica, verificando il contentType di ogni parte della mail multipart, ora non vedo + il testo della parte che ha come content type text/html o text/plain , mentre gli allegati vengono scaricati tranquillamente.
    Il codice modificato è questo

    codice:
     
    
    ....
    
    private void apriMessaggio(Message messaggio, int i) {
            Part part = messaggio;
            try {
                Object contenuto = part.getContent();
                if(contenuto instanceof Multipart){
                    Multipart mpart = (Multipart)contenuto;
                    System.out.println("MULTIPART-MAIL");
                    System.out.println("MITTENTE : " + messaggio.getFrom()[0]);
                    System.out.println("DATA : " + messaggio.getSentDate());
                    System.out.println("OGGETTO : " + messaggio.getSubject());
                    System.out.println("TESTO : ");
                    for(int p = 0; p < mpart.getCount(); p++){
                        part = mpart.getBodyPart(p); if(mpart.getContentType().startsWith("text/plain")||mpart.getContentType().startsWith("text/html")){
    
             InputStream input = messaggio.getInputStream();
                        BufferedReader r = new BufferedReader(new InputStreamReader(input));
                        String line ;
                        while((line = r.readLine())!=null){
                            System.out.println(line);
                        }
                 }                 
                        
                        String fname = part.getFileName();
                        String disposition = part.getDisposition();
                        if((fname!=null)&&(disposition!=null)){
                            FileOutputStream writer = new FileOutputStream("mail//"+fname);
                            byte[] buffer = new byte[4096];
                            InputStream in = part.getInputStream();
                            while(true) {
                               int readed = in.read( buffer );
                               if( readed == -1 ) {
                                   break;
                               }
                               writer.write( buffer, 0, readed );
                               writer.close();
                            }
                            in.close();
                            System.out.println("Salvato il file " + fname );
                        }
                    }
    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.