JavaMail – l’Analisi del contenuto delle email, non riesco a farlo funzionare! (Messaggio.getContent())

Per un paio di settimane che sto sviluppando un client email per android, ho ignorato l’analisi del contenuto delle email per un po ‘ e io non sono mai riuscito a farlo funzionare. Quindi, è giunto il momento di chiedere aiuto!

Ho cercato in giro e mi sono imbattuto in un paio di metodi che ho provato, ma non ha mai avuto molto successo con le! Attualmente il mio più vicina tentativo dovrebbe essere:

private String parseContent(Message m) throws Exception
{       
    //Multipart mp = (Multipart)c;
    //int j = mp.getCount();

    /*for (int i = 0; i < mp.getCount(); i++)
    {
        Part part = mp.getBodyPart(i);
        System.out.println(((MimeMessage)m).getContent());
        content = content + part.toString();
        //System.out.println((String)part.getContent());
    }*/

    Object content = m.getContent();
    String contentReturn = null;

    if (content instanceof String) 
    {
        contentReturn = (String) content;
    } 
    else if (content instanceof Multipart) 
    {
        Multipart multipart = (Multipart) content;
        BodyPart part = multipart.getBodyPart(0);
        part.toString();
        contentReturn = part.getContent().toString();
    }   
    return contentReturn;
}

Ma non funziona e ricevo senza senso come “[email protected]”.

Chiunque può vedere dove sto andando male?

Grazie,
Rhys

InformationsquelleAutor Rhys12341111 | 2011-04-11



5 Replies
  1. 9

    Nessuno di questi suggerimenti è valido. Non c’è bisogno di fare nulla di complesso di qui. Mimemessage ha message.writeTo(outputStream);

    Di tutto il necessario per stampare il messaggio è:

    message.writeTo(System.out);

    Il codice di cui sopra, provvederà a stampare il reale messaggio mime per la console (o è possibile utilizzare qualsiasi logger).

    Salvare il contenuto .eml e può essere aperto in outlook. Semplice!!

    • Vi ringrazio per questo. È assolutamente la soluzione corretta!
  2. 4
        Multipart multipart = (Multipart) content;
        BodyPart part = multipart.getBodyPart(0);
        part.toString();
        contentReturn = part.getContent().toString();

    Quando si dispone di Parte di parte, si dovrebbe tenere il test

    se(part.getContent() instanceof Stringa){

    }

  3. 2

    Anche io ho avuto lo stesso errore di eventuali provato quasi ogni cosa, ma la soluzione che ha funzionato per me è

    private String getFinalContent(Part p) throws MessagingException,
                IOException {
    
            String finalContents = "";
            if (p.getContent() instanceof String) {
                finalContents = (String) p.getContent();
            } else {
                Multipart mp = (Multipart) p.getContent();
                if (mp.getCount() > 0) {
                    Part bp = mp.getBodyPart(0);
                    try {
                        finalContents = dumpPart(bp);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return finalContents.trim();
        }
    
    private String dumpPart(Part p) throws Exception {
    
            InputStream is = p.getInputStream();
            //If "is" is not already buffered, wrap a BufferedInputStream
            //around it.
            if (!(is instanceof BufferedInputStream)) {
                is = new BufferedInputStream(is);
            }
            return getStringFromInputStream(is);
        }
    
    private String getStringFromInputStream(InputStream is) {
    
            BufferedReader br = null;
            StringBuilder sb = new StringBuilder();
            String line;
            try {
                br = new BufferedReader(new InputStreamReader(is));
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                    sb.append("\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sb.toString();
        }

    Spero che questo vi aiuterà a qualcuno.

  4. 2

    Ho avuto gli stessi problemi durante l’analisi del Messaggio di javax mail. Nella mia soluzione l’ho trovata una cosa strana. Elenco posta da POP3 non mi dà corpo della Mail il contenuto. Così utilizzato IMAP che ha funzionato per me. Ora sono in grado di analizzare Text/plain nonché Text/Html e leggere il corpo. Per analizzare la stessa che ho utilizzato il seguente metodo.

    public String printMessage(Message message) {
    
        String myMail = "";
    
        try {
            //Get the header information
            String from = ((InternetAddress) message.getFrom()[0])
                    .getPersonal();
    
    
    
            if (from == null)
                from = ((InternetAddress) message.getFrom()[0]).getAddress();
            System.out.println("FROM: " + from);
            String subject = message.getSubject();
            System.out.println("SUBJECT: " + subject);
            //-- Get the message part (i.e. the message itself) --
            Part messagePart = message;
            Object content = messagePart.getContent();
            //-- or its first body part if it is a multipart message --
            if (content instanceof Multipart) {
                messagePart = ((Multipart) content).getBodyPart(0);
                System.out.println("[ Multipart Message ]");
            }
            //-- Get the content type --
            String contentType = messagePart.getContentType();
            //-- If the content is plain text, we can print it --
            System.out.println("CONTENT:" + contentType);
            if (contentType.startsWith("TEXT/PLAIN")
                    || contentType.startsWith("TEXT/HTML")) {
                InputStream is = messagePart.getInputStream();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is));
                String thisLine = reader.readLine();
                while (thisLine != null) {
                    System.out.println(thisLine);
                    myMail = myMail + thisLine;
                    thisLine = reader.readLine();
                }
    
    
            }
            System.out.println("-----------------------------");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    
        return myMail;
    
    }

    Speranza che aiuta qualcuno.

  5. 0

    Non del tutto sicuro, ma quello che sembra è che si desidera convertire un MimeMessage in una Stringa. A rigor di termini, non c’è uno “standard” traduzione per MimeMessage di Stringa, ma qui è un pezzo di codice che ho scritto un paio di anni fa che tenta di generare una tale traduzione. Testato solo su messaggi in inglese, così i18n dovrà essere qualcosa che pensi di te stesso.

    Purtroppo è COSÌ stupido filtro sembra pensare che il mio codice di esempio è un’immagine e non mi lascia postare: date un’occhiata alla classe a http://pastebin.com/pi9u5Egq : il codice è fare un mucchio di altre cose inutili (era sputata in HTML, che è stato reso utilizzo di disco volante), e richiede anche Jakarta Commons Lang, javamail e l’attivazione di librerie, ma per me funziona. Si invocano come questo:

    fetchText(message, null, false, false);

    Per ottenere una stringa di testo. Provare che per dimensione.

    • Come va ho compilato la mia domanda e, in qualche modo, la maggior parte delle email venivano analizzati…. Poi quando ho riavviato l’App mi è stato sempre restituito che a quanto pare la mia casella di posta in arrivo è vuota. 🙁 quindi se posso risolvere il problema che cercherò che il codice fuori 😀 (Nuovo problema.. se siete interessati: stackoverflow.com/questions/4652946/…)

Lascia un commento