आशय का उपयोग कर Android एकाधिक ईमेल संलग्नक


98

मैं इंटेंट के साथ उपयोग करके अटैचमेंट (छवि फ़ाइल, ऑडियो फ़ाइल, आदि) के साथ ईमेल भेजने के लिए एंड्रॉइड प्रोग्राम पर काम कर रहा हूं ACTION_SEND। ईमेल के एक एकल लगाव होने पर कार्यक्रम काम कर रहा है। मैं Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)निर्दिष्ट छवि फ़ाइल को मेल में संलग्न करता था और यह ठीक काम कर रहा है, मेल को जीमेल के माध्यम से वितरित किया जा सकता है। हालाँकि, जब मैंने Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)कई बार कॉल करके एक ही मेल पर एक से अधिक चित्र संलग्न करने की कोशिश की , तो यह काम करने में विफल रहा। ईमेल में कोई भी अनुलग्नक दिखाई नहीं देता है।

मैंने ईमेल अनुलग्नक के बारे में एसडीके प्रलेखन और एंड्रॉइड प्रोग्रामिंग उपयोगकर्ता समूह को खोजा, लेकिन कोई संबंधित जानकारी नहीं पा सकता है। हालाँकि, मुझे पता चला है कि एक और आशय स्थिरांक ACTION_SEND_MULTIPLE(एपीआई स्तर 4 के बाद से उपलब्ध) है जो मेरी आवश्यकता को पूरा कर सकता है। एसडीके प्रलेखन के आधार पर, यह केवल कहता है कि यह किसी और को कई डेटा वितरित करता है, यह काम करता है ACTION_SEND, जैसे डेटा एकाधिक है। लेकिन मैं अभी भी इस कमांड के सही उपयोग का पता नहीं लगा सका। मैंने इरादे की घोषणा करने की कोशिश की ACTION_SEND_MULTIPLE, फिर putExtra(EXTRA_STREAM, uri)कई बार कई छवियों को संलग्न करने के लिए कॉल किया , लेकिन मुझे पहले की तरह एक ही गलत परिणाम मिला, कोई भी अनुलग्नक ईमेल में नहीं दिखा।

किसी के साथ की कोशिश की है ACTION_SEND_MULTIPLEऔर यह कई ईमेल अनुलग्नक के साथ काम कर रहा है?


मेरी भी यही समस्या है। यह कोड काम नहीं कर रहा है। एमएमएस भेजने के दौरान एक ही समस्या मौजूद है, केवल एक फ़ाइल को जोड़ने की संभावना है। क्या आपके पास इसके कुछ विचार दूसरे तरीके से हैं ??

जवाबों:


187

यहां वह कोड है जिसे आपको एक ईमेलइंट बनाने की आवश्यकता है जिसमें कई अनुलग्नक हैं।

public static void email(Context context, String emailTo, String emailCC,
    String subject, String emailText, List<String> filePaths)
{
    //need to "send multiple" to get more than one attachment
    final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, 
        new String[]{emailTo});
    emailIntent.putExtra(android.content.Intent.EXTRA_CC, 
        new String[]{emailCC});
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
    //has to be an ArrayList
    ArrayList<Uri> uris = new ArrayList<Uri>();
    //convert from paths to Android friendly Parcelable Uri's
    for (String file : filePaths)
    {
        File fileIn = new File(file);
        Uri u = Uri.fromFile(fileIn);
        uris.add(u);
    }
    emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
    context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}

2
आप इरादे के लिए विषय और ईमेलटेक्स्ट डालना भूल गए। अन्यथा कोड के लिए धन्यवाद।
बहादरु यान

5
सही MIME डेटा टाइप "टेक्स्ट / प्लेन" होना चाहिए न कि "प्लेन / टेक्स्ट" emailIntent.setType("text/plain");:। यदि आप "सादे / पाठ" का उपयोग करते हैं, तो एंड्रॉइड GMail को एक प्रेषक के रूप में उपयोग करने के लिए मजबूर करेगा, लेकिन यदि आप "टेक्स्ट / सादे" का उपयोग करते हैं, तो यह जीमेल, फेसबुक, ब्लूटूथ आदि के साथ एप्लिकेशन चयनकर्ता संवाद प्रदान करेगा, यदि आप केवल मेल प्रोग्राम प्रस्तावित करना चाहते हैं इसके बजाय "टेक्स्ट / xml" का उपयोग करें।
आइडलोन

4
और अगर आप अंतिम पंक्ति को context.startActivity(emailIntent);चेकबॉक्स में बदलते हैं तो "इस क्रिया के लिए डिफ़ॉल्ट रूप से उपयोग करें" एप्लिकेशन चयनकर्ता संवाद में दिखाई देगा, इस प्रकार उपयोगकर्ता कई अनुलग्नकों के साथ ईमेल भेजने के लिए डिफ़ॉल्ट एप्लिकेशन का चयन करने में सक्षम होगा।
आइडलोन

2
यह उदाहरण मुझे "AndroidRuntimeException: Calling startActivity () गतिविधि संदर्भ के बाहर से कॉल कर रहा है, इसके लिए FLAG_ACTIVITY_NEW_TASK ध्वज की आवश्यकता है। क्या यह वास्तव में आप चाहते हैं?" मैंने इस ई-मेल पद्धति के लिए एप्लिकेशन और आधार संदर्भ दोनों को पास करने की कोशिश की है, और दोनों एक ही त्रुटि के परिणामस्वरूप हैं।
रवमीर

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

29

ACTION_SEND_MULTIPLE कार्रवाई होनी चाहिए

और फिर emailIntent.setType("text/plain");

के बाद:

ArrayList<Uri> uris = new ArrayList<Uri>();
String[] filePaths = new String[] {"sdcard/sample.png", "sdcard/sample.png"};
for (String file : filePaths)
{
    File fileIn = new File(file);
    Uri u = Uri.fromFile(fileIn);
    uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(emailIntent);

यह मेरे लिए काम करता है।


19

हालांकि यह एक पुराना धागा है, लेकिन जैसा कि यह Google खोजों में शीर्ष पर दिखाया गया है, मैं इसे पूरा करने के लिए एक छोटा संकेत जोड़ना चाहता हूं, इसलिए मैंने इस पर हामी भरी।

मेल गतिविधि के लिए संलग्न फाइलों को पठनीय बनाना आवश्यक है, अन्यथा वे संलग्न नहीं होंगे। इसलिए आपको कहीं बुलाना होगा

fileIn.setReadable(true, false)

धन्यवाद सर, मेल केवल अटैचमेंट भेजने में सक्षम नहीं था।
जोसजुलियो

श्रीमान धन्यवाद! मैं इस लाइन के बिना भेजी जाने वाली तस्वीरों को नहीं बना सका
20

वाह! इस जवाब ने मेरा दिन पूरी तरह से बचा लिया। अगर किसी को "एक या एक से अधिक फाइलें संलग्न नहीं हैं, तो gmail ऐप से त्रुटि 20mb सीमित करें", यह फिक्स सब कुछ हल करता है। उत्तम टिप कभी!
बेल्फेगोर


2

कई अटैचमेंट के लिए, PutParcelableArrayListExtra(Intent.ExtraStream, uris)जहाँ uris वेरिएबल है, List<IParcelable>(). यहाँ एक उदाहरण है:

var email = new Intent(Intent.ActionSendMultiple);
    email.SetType("text/plain");
    email.PutExtra(Intent.ExtraEmail, new string[]{emailTo});
    email.PutExtra(Intent.ExtraCc, new string[]{emailCC});

    var uris = new List<IParcelable>();
    filePaths.ForEach(file=> {
        var fileIn = new File(file);
        var uri = Android.Net.Uri.FromFile(fileIn);
        uris.Add(uri);
    });

    email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);

    context.StartActivity(Intent.CreateChooser(email, "Send mail..."));

उम्मीद है की यह मदद करेगा ;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.