2009-12-17 5 views
6

Ich versuche, einen IMAP-E-Mail-Client mit der javax.mail-API zu entwickeln. Ich konnte die Server kontaktieren, E-Mails, Anhänge und andere Operationen problemlos abrufen.IMAP - javax.mail. - Nur Body ohne Anhang abrufen

Wir möchten jedoch den Anhang nicht abrufen, bis der Benutzer explit anzeigen möchte, um die Leistung zu verbessern. Dies würde bedeuten, dass wir Informationen benötigen würden, die anzeigen würden, ob die E-Mail einen Anhang hat, wenn ja, dann den Dateinamen und die Größe (n), aber würde nicht senden Sie mir den tatsächlichen Inhalt der E-Mail. In der API-Beschreibung konnte ich jedoch keine Methode finden, die nur den mehrteiligen Inhalt zurückgibt.

Gibt es eine Möglichkeit, nur den Körper und die Details der Anlage zu holen, aber nicht die eigentliche Anlage?

Danke, Aravind

Antwort

2

Verfahren getContent() von javax.Part kehrt

der Inhalt als Objekt Java. Der Typ des zurückgegebenen Objekts ist natürlich abhängig vom Inhalt selbst. Für Beispiel ist das zurückgegebene Objekt für "Text/plain" Inhalt in der Regel ein String -Objekt. Das zurückgegebene Objekt für ein "multipart" Inhalt ist immer eine Multipart Unterklasse.

Siehe http://download.oracle.com/javaee/6/api/javax/mail/Part.html#getContent%28%29

Wenn ein Message (die ein Part ist) Anlagen enthält, das Verfahren ein getContent Multipart Objekt zurück. Außerdem können Sie den MIME-Typ des Teils mit getContentType kennen.

Die Informationen, die in der Dokumentation fehlen, ist, dass dieses MultiPart Objekt, das von getContent zurückgegeben wird, nur eine leere Darstellung der Nachrichtenstruktur ist. Der Inhalt der einzelnen Part der Multipart wird nur vom Server abgerufen, wenn Sie ausdrücklich danach fragen. Zum Beispiel kann ein mehrteiliger Message Sie tun würden, analysieren:

if(p.isMimeType("multipart/*")) { 

    Multipart mp = (Multipart)p.getContent(); 
    // the content was not fetched from the server 

    // parse each Part 
    for (int i = 0; i < mp.getCount(); i++) { 
     Part inner_part = mp.getBodyPart(i) 

     if(inner_part.isMimeType("text/plain")) { 
      String text = inner_part.getText(); 
      // the content of this Part was fetched from the server 
     } 
    } 
} 

Etwas anderes zu berücksichtigen ist, dass für eine optimale Leistung sollten Sie die Karosseriestruktur Informationen vom Server in Batch für die Sammlung von Meldungen erhalten Sie analysieren wollen (siehe http://download.oracle.com/javaee/6/api/javax/mail/FetchProfile.Item.html#CONTENT_INFO). Wenn nicht, jeder

Multipart mp = (Multipart)p.getContent();

wird in einer Anfrage an den Server führt die Körperstruktur zu holen. Wenn der Ansatz FetchProfile verwendet wird, wird die Körperstruktur für die Sammlung von Nachrichten mit nur einer Anforderung abgerufen. Sie können die Anforderungen an den Server im Protokoll sehen, wenn Sie die Debug-Modus auf der Sitzung aktivieren:

session.setDebug(true); 

Dieser sagte, Größe und Dateinamen von Anhängen bekommen nur Part.getSize() und Part.getFileName() bzw. verwenden.