簡體   English   中英

使用JavaMail閱讀GMail的完整電子郵件

[英]Reading the full email from GMail using JavaMail

我正在使用javamail,我無法從我的Gmail電子郵件中獲取HTML。 我有以下內容:

Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myemail@gmail.com", "password");
System.out.println(store);

Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
System.out.println(message); // com.sun.mail.imap.IMAPInputStream@cec0c5

以上一切正常,但我無法打印或獲取實際的HTML或文本電子郵件。 我只是得到某種InputStream,我如何輕松處理這個以獲取電子郵件的原始HTML?

我也試過循環閱讀消息,但這並沒有讓我走得太遠:

Message message[] = inbox.getMessages();

    for (int i=0, n=message.length; i<n; i++) {
       System.out.println(i + ": " + message[i].getFrom()[0] 
         + "\t" + message[i].getSubject());
       String content = message[i].getContent().toString();
       if (content.length() > 200) 
    content = content.substring(0, 600);
       System.out.print(content);

}

非常感謝所有的hlep。

問題是您獲得的數據通常是mime / multipart流的原始數據。 你需要做這樣的事情:

for(Message message:messages) {
  if(javax.mail.Multipart.class.isInstance(message)){
    Multipart parts = (Multipart)msg.getContent(), innerPart;
    int i;
    for(i=0;i<parts.getCount();i++){
      javax.mail.BodyPart p = parts.getBodyPart(i);
      if("text/html".equals(p.getContentType())){
        // now you can read out the contents from p.getContent()
        // (which is typically an InputStream, but depending on your javamail
        // libraries may be something else
      }
    }
  }
}

祝好運。

InputStream對象包含電子郵件的正文。 您需要讀取整個流以讀取整個消息體。 例如, 這篇SO帖子詳細介紹了如何使用Apache庫將整個InputStream寫入OutputStream (如System.out 這將是一個很好的起點,因為您可以將整個郵件正文打印到控制台。 否則,您將需要使用一些緩沖區等來將數據從流中拉出並將其放入您想要放入的任何內容中。還有這個SO帖子詳細說明,使用相同的庫,如何轉換將InputStream轉換為String

您可以使用Apache Commons的IOUtils,甚至可以嘗試以下方面的內容:

BufferedReader br = new BufferedReader(new InputStreamReader(daInputStream));
String oneLine = "";
while ( (oneLine = br.readLine()) !=  null )
    System.out.println(oneLine);

如果你使用java郵件,你可以使用“multipart”和“bodypart”對象來瀏覽電子郵件消息,以提取“text / plain”和“text / html”內容,這些內容就是你想要的內容。

你可以嘗試使用MimeMessage類:

Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myemail@gmail.com", "password");

Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
    MimeMessage im = new MimeMessage(session, message.getContent());
    im.getFrom();
    im.getMessageID();
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM