16 Stimmen

Lesen des Hauptteils einer mehrteiligen Pantomime

Ok, ich verwende .getcontent und erhalte javax.mail.internet.MimeMultipart@fd13b5 usw.

Ich weiß, ich brauche so etwas in meinem Code, aber ich weiß nicht, was genau benötigt wird.

if (p.isMimeType("text/plain")) {
    pr("This is plain text");
    pr("---------------------------");
    if (!showStructure && !saveAttachments)
    System.out.println((String)p.getContent());
} else if (p.isMimeType("multipart/*")) {
    pr("This is a Multipart");
    pr("---------------------------");
    Multipart mp = (Multipart)p.getContent();
    level++;
    int count = mp.getCount();
    for (int i = 0; i < count; i++)
    dumpPart(mp.getBodyPart(i));
    level--;
} else if (p.isMimeType("message/rfc822")) {
    pr("This is a Nested Message");
    pr("---------------------------");
    level++;
    dumpPart((Part)p.getContent());
    level--;

im Moment versuche ich, alle Informationen in eine Zeichenkette zu setzen, die dann auf einer grafischen Benutzeroberfläche angezeigt wird, im Moment habe ich alles, was gut funktioniert, außer dem Körperinhalt, der als angezeigt wird. javax.mail.internet.MimeMultipart@fd13b5. jede Hilfe wäre sehr zu schätzen, wie im ziemlich stecken.

package EmailTable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Email implements ActionListener
{

private mail mail;
private List mails;
private String password;
private String user;
private String getText;
private boolean textIsHtml = false;

public Email(List mails,String password,String user) throws MessagingException,     IOException {

password = "password";
user = "user";
this.mails = mails;
String host = "10..10.10.10";
   Properties properties = System.getProperties(); 
  Session session = Session.getDefaultInstance(properties);
  Store store = session.getStore("pop3");
  store.connect(host, user, password);
  Folder folder = store.getFolder("inbox");
  folder.open(Folder.READ_ONLY);
  Message[] messages = folder.getMessages();

    int length = messages.length-1;
    for (int i = length; i > length-30; i--) {

            mail = new mail();

            mail.setEmail(messages[i].getFrom()[0]);

              String to = InternetAddress.toString(
                                messages[i].getRecipients(Message.RecipientType.TO));
                      if (to != null) {
                          mail.setEmail2(to);
                      }

            mail.setSubject(messages[i].getSubject());

            mail.setDate(messages[i].getSentDate());

            mail.setMessage(messages[i]);

             mail.setContent(((MimeMessage)messages[i]).getContent());

            Email.this.mails.add(mail);
  }

}

public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}
}

9voto

ThePCWizard Punkte 3278

Ja, Sie müssen durch jeden BodyPart iterieren, um seinen Typ zu ermitteln und dann den Inhalt entsprechend zu erhalten. Hier ist, was ich verwendet, um den Inhalt einer Nachricht zu erhalten. Aber ich bin immer noch nicht in der Lage, den richtigen Inhalt für einige Nachrichten zu erhalten.
Bearbeitet
Nach der Implementierung des von Bill vorgeschlagenen Codes funktioniert es besser.

    Object msgContent = messages[i].getContent();

    String content = "";             

     /* Check if content is pure text/html or in parts */                     
     if (msgContent instanceof Multipart) {

         Multipart multipart = (Multipart) msgContent;

         Log.e("BodyPart", "MultiPartCount: "+multipart.getCount());

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

          BodyPart bodyPart = multipart.getBodyPart(j);

          String disposition = bodyPart.getDisposition();

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

              DataHandler handler = bodyPart.getDataHandler();
              System.out.println("file name : " + handler.getName());                                 
            }
          else { 
                  content = getText(bodyPart);  // the changed code         
            }
        }
     }
     else                
         content= messages[i].getContent().toString();

4voto

carbontax Punkte 2164

Diese Lösung hat bei mir viel besser funktioniert. Ich wollte lediglich meine E-Mail-Nachricht für Entwicklungs-/Testzwecke protokollieren. Verwenden Sie die Methode MimeMessage.writeTo(OutputStream).

void logMimeMessage(MimeMessage msg) throws MessagingException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    try {
        msg.writeTo(out);
    } catch (IOException e) {
        logger.catching(new MyException("Cannot log MimeMessage",e));
    }
    logger.error(out.toString());
}

Vielen Dank an den Kommentar von @zzzzz, der auf diese Antwort verweist JavaMail - Parsing E-Mail-Inhalt, kann nicht scheinen, um es zum Laufen zu bringen! (Nachricht.getContent())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X