2011-04-11 17 views
8

कुछ हफ्तों के लिए मैं एंड्रॉइड के लिए एक ईमेल क्लाइंट विकसित कर रहा हूं, मैं थोड़ी देर के लिए पार्सिंग ईमेल सामग्री को अनदेखा कर रहा हूं क्योंकि मैं इसे कभी भी काम करने में सक्षम नहीं हूं। इस प्रकार, मदद के लिए समय आ गया है!जावामेल - ईमेल सामग्री को पार्स करना, इसे काम करने के लिए प्रतीत नहीं होता है! (Message.getContent())

मैं चारों ओर देख रहा हूं और मैंने कोशिश की कुछ विधियों में आ गया है लेकिन कभी भी सफलता नहीं मिली! वर्तमान में मेरे करीबी प्रयास होना चाहिए था:

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

लेकिन यह काम नहीं करता है और मैं इस तरह के "[email protected]" के रूप में निरर्थक शब्द मिलता है।

क्या कोई देख सकता है कि मैं कहां गलत हो रहा हूं?

धन्यवाद, रिज़

उत्तर

0

पूरी तरह सुनिश्चित नहीं हैं कि, लेकिन यह सुनने में लगती है जैसे आप एक स्ट्रिंग में एक MimeMessage परिवर्तित करना चाहते हैं। कड़ाई से बोलते हुए, माइम मैसेज टू स्ट्रिंग के लिए कोई "मानक" अनुवाद नहीं है, लेकिन यहां कोड का एक हिस्सा है जिसे मैंने कुछ साल पहले लिखा था, जो इस तरह के एक अनुवाद को उत्पन्न करने का प्रयास करता है। केवल अंग्रेजी संदेशों पर परीक्षण किया गया है, इसलिए i18n को आपके बारे में कुछ ऐसा होना होगा जो आप अपने बारे में सोचते हैं।

दुर्भाग्यवश एसओ का बेवकूफ फ़िल्टर ऐसा लगता है कि मेरा कोड नमूना एक छवि है और मुझे इसे पोस्ट करने नहीं देगा: http://pastebin.com/pi9u5Egq पर कक्षा को देखें: कोड अन्यथा अनावश्यक चीजों का एक गुच्छा कर रहा है (यह थूक रहा था यह एचटीएमएल में बाहर है जिसे फ्लाइंग सॉकर का उपयोग करके प्रस्तुत किया गया था), और जकार्ता कॉमन्स लैंग, जावामेल और सक्रियण पुस्तकालयों की भी आवश्यकता है, लेकिन यह मेरे लिए काम करता है। आप इसे इस तरह से आह्वान करेंगे:

fetchText(message, null, false, false);

टेक्स्ट स्ट्रिंग प्राप्त करने के लिए। आकार के लिए कोशिश करें।

+0

जैसा कि यह जाता है, मैंने अपना आवेदन संकलित किया और किसी भी तरह से अधिकांश ईमेल पार्स किए जा रहे थे .... फिर जब मैंने ऐप को पुनरारंभ किया तो मैं वापस लौटा रहा था, जाहिर है कि मेरा ईमेल इनबॉक्स खाली था। :(इसलिए यदि मैं उस समस्या को ठीक कर सकता हूं तो मैं उस कोड को आजमाउंगा: डी (नई समस्या .. यदि आप रुचि रखते हैं: http://stackoverflow.com/questions/4652946/when-attempting-to-pull-pop3 -inbox-folder-use-javamail-i-am-getting-no-email) – Rhys12341111

4
Multipart multipart = (Multipart) content; 
    BodyPart part = multipart.getBodyPart(0); 
    part.toString(); 
    contentReturn = part.getContent().toString(); 

आप bodypart हिस्सा है, तो आप परीक्षण

अगर (part.getContent() स्ट्रिंग instanceof) { ... } उपरोक्त सुझावों का

9

कोई नहीं रखना चाहिए यह सही है। आपको यहां कुछ भी जटिल करने की आवश्यकता नहीं है। Mimemessage message.writeTo(outputStream);

मिल गया है आप सभी संदेश मुद्रित करने के लिए की जरूरत है:

message.writeTo(System.out); 

ऊपर कोड कंसोल के लिए वास्तविक माइम संदेश प्रिंट होगा (या आप किसी भी लकड़हारा उपयोग कर सकते हैं)।

सामग्री को पर सहेजें .eml और आप इसे Outlook में खोल सकते हैं। इतना ही आसान!

+0

इसके लिए धन्यवाद। यह बिल्कुल सही समाधान है! – carbontax

1

मैं भी यही त्रुटि किसी भी लगभग हर बात करने की कोशिश की है, लेकिन समाधान मेरे लिए काम किया

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

आशा इस किसी की मदद करेंगे।

1

जैवक्स मेल का संदेश पार्स करते समय मुझे वही समस्याएं थीं। मेरे कामकाज में मुझे एक अजीब चीज मिली। पीओपी 3 से लिस्टिंग मेल मुझे मेल बॉडी सामग्री नहीं दे रहा था। तो आईएमएपी का इस्तेमाल किया जो मेरे लिए काम करता था।अब मैं पाठ/सादा के साथ-साथ टेक्स्ट/एचटीएमएल और शरीर को पढ़ने में सक्षम हूं। इसका विश्लेषण करने के लिए मैंने निम्नलिखित विधि का उपयोग किया।

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; 

} 

आशा है कि यह किसी की सहायता करे।

संबंधित मुद्दे