2009-11-18 12 views
5

मैं वर्तमान में एक एप्लिकेशन विकसित कर रहा हूं जो जीमेल खाते से अनुलग्नक डाउनलोड करता है। अभी, ज़िप्ड अटैचमेंट डाउनलोड करते समय मुझे त्रुटि मिली। लेकिन, सब कुछ नहीं, कुछ मैं बिना किसी त्रुटि के इसे पुनर्प्राप्त कर सकता हूं। यहां अपवाद संदेश है:जावामेल बेसएनकोड 64 त्रुटि

Exception in thread "main" com.sun.mail.util.DecodingException: BASE64Decoder: Error in encoded stream: needed 4 valid base64 characters but only got 1 before EOF, the 10 most recent characters were: "Q3w5ilxj2P" 

FYI: मैं जीमेल वेब इंटरफ़ेस के माध्यम से अनुलग्नक डाउनलोड करने में सक्षम था।

 Multipart multipart = (Multipart) message.getContent(); 

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

      BodyPart bodyPart = multipart.getBodyPart(i); 

      if (bodyPart.getFileName().toLowerCase().endsWith("zip") || 
        bodyPart.getFileName().toLowerCase().endsWith("rar")) { 
       InputStream is = bodyPart.getInputStream(); 
       File f = new File("/tmp/" + bodyPart.getFileName()); 
       FileOutputStream fos = new FileOutputStream(f); 
       byte[] buf = new byte[bodyPart.getSize()]; 
       int bytesRead; 
       while ((bytesRead = is.read(buf)) != -1) { 
        fos.write(buf, 0, bytesRead); 
       } 
       fos.close(); 
      } 
     } 
    } 

किसी को भी पता नहीं है, कैसे इस समस्या को हल करने के लिए:

यहाँ टुकड़ा है?

+0

इस के साथ कोई भाग्य अभी तक? – William

+0

नहीं, अभी तक नहीं। लगता है। कोई भी जावा मेल में रूचि नहीं रखता है :( – ariefbayu

उत्तर

10

ज्ञात सीमाओं, कीड़े, JavaMail के मुद्दों की एक सूची से:

कुछ IMAP सर्वर को लागू नहीं करते IMAP आंशिक कार्यक्षमता ठीक से लाएं। यह समस्या आमतौर पर भ्रष्ट ईमेल संलग्नक के रूप में प्रकट होती है जब IMAP सर्वर से बड़े संदेश डाउनलोड करते हैं। सर्वर बग को काम करने के लिए, "mail.imap.partialfetch" प्रॉपर्टी को पर सेट करें। आपको प्रॉपर्टी ऑब्जेक्ट में प्रॉपर्टी सेट करना होगा जो आप अपने सत्र में प्रदान करते हैं।

तो आप बस आंशिक imap सत्र में लाने बंद कर देते हैं चाहिए।

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
props.setProperty("mail.imaps.partialfetch", "false"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "<username>","<password>"); 
+0

क्या होगा यदि यह ठीक नहीं करता है? मैंने 'property.setProperty (" mail.imaps.partialfetch "," false ") सेट किया है; '(मैंने सेटिंग" को भी सेट करने का प्रयास किया है .imap.partialfetch ", जो या तो मदद नहीं करता), फिर भी मुझे अभी भी" BASE64Decoder: एन्कोडेड स्ट्रीम में त्रुटि: 4 वैध बेस 64 वर्णों की आवश्यकता है, लेकिन केवल ईओएफ से पहले 1 प्राप्त हुआ " – David

1

आप जावा मेल एपीआई का उपयोग कर रहे हैं तो, जबकि आप IMAP सर्वर connectin कर रहे हैं इन लाइनों को जोड़ने ......

Properties prop = new Properties(); 
prop.put("mail.imaps.partialfetch", false); 
Session session = Session.getDefaultInstance(prop, null); 

........ : उदाहरण के लिए .... आपका कोड .. ......

यह काम करना चाहिए।

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