2016-02-12 7 views
9
पर जीमेल ग्राहक एपीआई का उपयोग कर बड़े अनुलग्नकों के साथ ईमेल भेजने के लिए

मैं बड़े अनुलग्नकों के साथ बहुखण्डीय ईमेल बनाने के लिए निम्नलिखित कोड की कोशिश की है:कैसे एंड्रॉयड

Properties props = new Properties(); 
Session session = Session.getDefaultInstance(props, null); 

MimeBodyPart mimeBodyText = new MimeBodyPart(); 
mimeBodyText.setHeader("Content-Type", "text/html; charset=\"UTF-8\""); 
mimeBodyText.setContent(body, "text/html"); 

Multipart mp = new MimeMultipart(); 
mp.addBodyPart(mimeBodyText); 

if (attachments != null && attachments.size() > 0) { 
    for (Uri uri : attachments) { 
     MimeBodyPart mimeBodyAttachment = new MimeBodyPart(); 
     String fileName = UriUtils.getFileName(uri, context); 
     String mimeType = UriUtils.getMimeType(uri, context); 
     Log.d(TAG, "Generating file info, uri=" + uri.getPath() + ", mimeType=" + mimeType); 
     FileInputStream is = UriUtils.generateFileInfo(context, uri, mimeType); 
     if (is == null) { 
      throw new MessagingException("Failed to get file for uri=" + uri.getPath()); 
     } 
     try 
     { 
      mimeBodyAttachment.setFileName(fileName); 
      mimeBodyAttachment.setHeader("Content-Type", mimeType + "; name=\"" + fileName + "\""); 
      DataSource source = new ByteArrayDataSource(is, mimeType); 
      mimeBodyAttachment.setDataHandler(new DataHandler(source)); 
      mimeBodyAttachment.setHeader("Content-Transfer-Encoding", "base64"); 
      mimeBodyAttachment.setDisposition(MimeBodyPart.ATTACHMENT); 
      mp.addBodyPart(mimeBodyAttachment); 
     } catch (IOException e) { 
      throw new MessagingException(e.getMessage()); 
     } 
    } 
} 

MimeMessage mimeMessage = new MimeMessage(session); 
mimeMessage.setFrom(new InternetAddress(from)); 
mimeMessage.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(recipient)); 
mimeMessage.setSubject(subject); 
mimeMessage.setContent(mp); 

Message message = createMessageWithEmail(mimeMessage); 

service.users().messages().send(from, message).execute(); 

कौन सा सुंदर क्या this guide में प्रस्तुत किया है के समान है, लेकिन , जब मैं ~ 5 एमबी से बड़ी फ़ाइल जोड़ने की कोशिश करता हूं, निष्पादन फ़ंक्शन लटकता है और वापस नहीं आता है (मुझे एक त्रुटि या कम से कम एक टाइमआउट की उम्मीद होगी लेकिन यह एक और मुद्दा है)

कुछ खोज के बाद, मैं मुझे लगता है कि मुझे किसी भी तरह upload अनुरोध (see here) करने की आवश्यकता है,में निम्न API 0 सही दिखता है:

Send send(java.lang.String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent) 

दुर्भाग्य से मुझे इसके उपयोग के बारे में कोई दस्तावेज़ या निर्देश नहीं मिला।
जब मैंने संलग्नक को mediaContent के रूप में कच्चे लगाने की कोशिश की तो मुझे एक त्रुटि मिली कि केवल समर्थित माइम प्रकार message/rfc822 है, इसलिए मैंने MimeBodyPart लेने का प्रयास किया है, मैं ऊपर for लूप में बना रहा हूं और इसका उपयोग करता हूं, लेकिन ऐसा लगता है लगाव सिर्फ अनदेखा किया जाता है।

किसी को Gmail client API और 'अपलोड' अनुलग्नक का उपयोग कैसे करना चाहिए?

+0

आप यह पढ़ कर दी: https://developers.google.com/gmail/api/v1/reference/users/messages/ – pratz9999

+0

@ pratz9999 हां मैंने किया, लेकिन यह http अनुरोध को संदर्भित करता है जबकि मैं क्लाइंट एपीआई के बारे में पूछ रहा हूं जो एपीआई के उपयोग को कम करना चाहिए। – SagiLow

+0

https://github.com/steveholt55/JavaMail-API-Android यह अधिक सहायक होगा – pratz9999

उत्तर

0

Google API के लिए जावा क्लाइंट के Media Upload/Download अनुभाग यह करने के लिए चरणों को इंगित करता है।

यह इंगित करता है कि आपको इस परिदृश्य के लिए अपलोड विकल्प के रूप में resumable media upload का उपयोग करने की आवश्यकता होगी। इसे लागू करने के लिए, आपको MediaHttpUploader और MediaUttpProgressListener का उपयोग करने की आवश्यकता होगी।

संदर्भित पृष्ठ में एक उदाहरण भी है जो send() के तीसरे पैरामीटर में InputStreamContent पास करने पर जीमेल पर काम कर सकता है।

+0

मुझे यकीन नहीं है कि मुझे 'MediaHttpUploader' या इसकी प्रगति श्रोता की आवश्यकता है, जैसा कि आप प्रदान किए गए पहले उदाहरण में देखेंगे, पहला उदाहरण दृश्य-विशिष्ट जेनरेटेड लाइब्रेरी का उपयोग दृश्यों के पीछे करने के लिए करता है, जो 'भेजें() 'एपीआई करता है, समस्या यह है कि जब मैं मीडिया प्रकार (यानी' छवि/जेपीईजी ') प्रदान करता हूं तो मुझे एक त्रुटि मिलती है:' मीडिया प्रकार 'छवि/जेपीईजी समर्थित नहीं है। मान्य मीडिया प्रकार : [संदेश/आरएफसी 822] ' – SagiLow

+0

अपडेट: मैंने' [message/rfc822] 'प्रारूप में अनुलग्नकों के लिए तीसरे तर्क का उपयोग करने का प्रयास किया है लेकिन वे संलग्न नहीं किए जा रहे हैं, मैंने पूरे संदेश के लिए तीसरे तर्क का भी उपयोग किया है इसके अनुलग्नक लेकिन मुझे बाउंस संदेश मिलता है कि संदेश भेजा नहीं गया था। – SagiLow

+0

मुझे यह भी विश्वास है कि मीडिया अपलोड एक अलग उपयोग-मामले के लिए है, यानी जीमेल एपीआई को सीधे इंटरनेट से कुछ लाने के लिए कहा जाता है। – rds

1

मुझे पता है कि यह प्रश्न कुछ महीने पुराना है, लेकिन एक ही समस्या में भाग लेने के बाद, मैं इसे समझने में सक्षम था।

मेरा कार्यान्वयन आपके जैसा ही है, मैंने जो कुछ बदल दिया वह आखिरी दो पंक्तियां थी।

तो बजाय का उपयोग कर:

Message message = createMessageWithEmail(mimeMessage); 

service.users().messages().send(from, message).execute(); 

उपयोग:

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
mimeMessage.writeTo(bytes); 

ByteArrayContent content = new ByteArrayContent("message/rfc822", bytes.toByteArray()); 
service.users().messages().send(from, null, content).execute();