2012-11-20 27 views
14

ठीक तो मैं .getcontent का उपयोग करें और [email protected] प्राप्त आदिपढ़ने शरीर के अंग

मैं मैं अपने कोड में कुछ इस तरह की जरूरत है पता है, लेकिन मैं न ठीक से पता है क्या जरूरत है।

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--; 
पल मैं astring जो तब इस समय एक जीयूआई पर दिखाया गया है करने के लिए सभी जानकारी डाल करने के लिए कोशिश कर रहा हूँ पर

मैं यह सब काम कर ठीक बार शरीर सामग्री है जो के रूप में दिखाया जा रहा है है। [email protected]। काफी मदद के रूप में किसी भी मदद की सराहना की जाएगी।

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 

} 
} 
+1

इस रूप में अच्छी तरह http://stackoverflow.com/questions/5628395/javamail-parsing-email-content-cant देखें -seem-to-get-work-message-getcont/26142591 # 26142591 – NoNaMe

उत्तर

7

हाँ, आप प्रत्येक bodypart.You के माध्यम से पुनरावृति करने के लिए यह प्रकार है पता करने के लिए और फिर उसके अनुसार सामग्री प्राप्त की है। यहां एक संदेश की सामग्री प्राप्त करने के लिए उपयोग किया गया है। लेकिन फिर भी मैं कुछ संदेशों के लिए सही सामग्री प्राप्त करने में सक्षम नहीं हूं।
संपादित
बिल द्वारा सुझाए गए कोड को लागू करने के बाद बेहतर काम करता है।

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(); 
+0

मैंने इसे देखा है और मुझे नहीं पता था कि इसका आधा हिस्सा पी से आया था। – J0rd4n500

+0

पी भाग/बॉडीपार्ट ऑब्जेक्ट जो आपको विधि से बाहर निकलने के लिए विधि को पास करना होगा। मेरा संपादित उत्तर देखें, विशेष रूप से 'else' कथन – ThePCWizard

4

यह समाधान मेरे लिए बहुत बेहतर काम करता है। मैं केवल विकास/परीक्षण उद्देश्यों के लिए अपना ईमेल संदेश लॉग करना चाहता था। MimeMessage.writeTo (आउटपुटस्ट्रीम) विधि का उपयोग करें।

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()); 
} 

ऊपर @zzzzz द्वारा टिप्पणी, जो इस जवाब से जुड़ा हुआ के लिए धन्यवाद JavaMail - Parsing email content, can't seem to get it to work! (Message.getContent())