ईमेल आशय भेजें


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

startActivity(Intent.createChooser(intent, "Send Email"));

उपरोक्त कोड निम्नलिखित ऐप दिखाते हुए एक डायलॉग खोलता है: - ब्लूटूथ, Google डॉक्स, याहू मेल, जीमेल, ऑर्कुट, स्काइप आदि।

दरअसल, मैं इन सूची-विकल्पों को फ़िल्टर करना चाहता हूं। मैं केवल ईमेल से संबंधित ऐप जैसे जीमेल, याहू मेल दिखाना चाहता हूं। यह कैसे करना है?

मैंने such Android Market ’एप्लिकेशन पर ऐसा उदाहरण देखा है।

  1. Android Market ऐप खोलें
  2. कोई भी एप्लिकेशन खोलें जहां डेवलपर ने अपना ईमेल पता निर्दिष्ट किया हो। (अगर आपको ऐसा कोई ऐप नहीं मिल रहा है तो बस मेरा ऐप खोलें: - बाजार: // details? Id = com.becomputer06.vehicle.diary.free, या 'वाहन डायरी' द्वारा खोजें)
  3. नीचे स्क्रॉल करें 'DEVELOPER'
  4. 'ईमेल भेजें' पर क्लिक करें

संवाद केवल ईमेल ऐप्स जैसे जीमेल, याहू मेल आदि दिखाता है। यह ब्लूटूथ, ऑर्कुट आदि नहीं दिखाता है कि कौन सा कोड ऐसे संवाद का निर्माण करता है?


4
क्षमा करें, यह Intent.ACTION_SEND के साथ संभव नहीं है। हो सकता है कि यह सीधे gmail-App के इरादे से काम करे लेकिन मुझे नहीं पता कि क्या यह संभव है।
टॉमी

19
अगर किसी को यहाँ ईमेल के बारे में जानने का इरादा है, तो EXTRA_MAIL को यहाँ दिखाए गए अनुसार String[]नहीं, बल्कि एक के अनुरूप होना चाहिए String
बिगस्टोन्स



कुछ अच्छी सलाह के लिए यहाँ देखें: medium.com/@cketti/…
Felix D.

जवाबों:


218

जब आप अपने इरादे को बदल देंगे। जैसे आप प्राप्त करेंगे नीचे टाइप करें

intent.setType("text/plain");

android.content.Intent.ACTION_SENDTOबिना फेसबुक या अन्य ऐप के साथ केवल ई-मेल क्लाइंट की सूची प्राप्त करने के लिए उपयोग करें । सिर्फ ईमेल क्लाइंट। उदाहरण के लिए:

new Intent(Intent.ACTION_SENDTO);

मैं आपको ईमेल ऐप पर सीधे आने का सुझाव नहीं दूंगा। उपयोगकर्ता को अपना पसंदीदा ईमेल ऐप चुनने दें। उसे विवश मत करो।

यदि आप ACTION_SENDTO का उपयोग करते हैं, तो putExtra विषय और पाठ को इरादे से जोड़ने के लिए काम नहीं करता है। विषय और बॉडी टेक्स्ट को जोड़ने के लिए Uri का उपयोग करें।

संपादित करें: हम MIME प्रकार के message/rfc822बजाय उपयोग कर सकते हैं "text/plain"। हालांकि, यह "केवल ईमेल ग्राहकों को प्रस्ताव" का संकेत नहीं दे रहा है - यह इंगित करता है कि "संदेश / rfc822 डेटा का समर्थन करने वाली किसी भी चीज़ की पेशकश करें"। यह आसानी से कुछ एप्लिकेशन शामिल कर सकता है जो ईमेल क्लाइंट नहीं हैं।

message/rfc822 के MIME प्रकार का समर्थन करता है .mhtml, .mht, .mime


7
क्या आप वांछित उत्पादन के लिए कुछ कोड प्रदान कर सकते हैं?
दीरा


76
इरादे चयनकर्ता कहता है कि no apps installed to perform this intentजब मैं उपयोग करता हूं ACTION_SENDTO। मैं एंड्रॉइड 4.1.2 का उपयोग कर रहा हूं और मेरे पास एक ईमेल ऐप इंस्टॉल है ...
ffleandro

4
'सही' तरीका मैग्नस का जवाब है। मैं स्वीकृत उत्तर को बदलने के लिए मूल पोस्टर की सिफारिश करता हूं।
jhabbott

8
भेजने के ऑपरेशन को करने के लिए MIME प्रकार का उपयोग करना एक बुरा विचार है, क्योंकि आप मूल रूप से एंड्रॉइड को उन ऐप्स की सूची प्रदान करने का निर्देश दे रहे हैं जो टाइप की फ़ाइल भेजने का समर्थन करते हैं message/rfc822। यह ई-मेल भेजने जैसा नहीं है। mailto:इसके बजाय प्रोटोकॉल का उपयोग करें , क्योंकि यही ई-मेल क्लाइंट वास्तव में समझते हैं।
पॉल लामर्ट्स्मा

871

स्वीकृत उत्तर 4.1.2 पर काम नहीं करता है। यह सभी प्लेटफार्मों पर काम करना चाहिए:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

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

अद्यतन: marcwjj के अनुसार , ऐसा लगता है कि 4.3 पर, हमें काम करने के लिए ईमेल पते के लिए स्ट्रिंग के बजाय स्ट्रिंग सरणी को पास करने की आवश्यकता है। हमें एक और पंक्ति जोड़ने की आवश्यकता हो सकती है:

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

लिंक को देखें


7
आप सही हैं, और यह 4.2 पर नहीं है। तो यह वास्तव में एकमात्र सही उत्तर है, धन्यवाद!
मॉर्डोयड

12
यह पूर्ण है। नीचे किसी ने उल्लेख किया है कि "मेल्टो" भाग को निर्दिष्ट करना वही है जो ईमेल क्लाइंट के लिए उपलब्ध विकल्पों को बताता है। Uri.fromParts ("mailto", "", null) का उपयोग करके कर्सर को प्राप्तकर्ता फ़ील्ड में रखा जाएगा - जो मुझे चाहिए उसके लिए एकदम सही है।
झबरा

24
इस ईमेल को आज़माएं। Intent.putExtra (Intent.EXTRA_TEXT, "मैं ईमेल शरीर हूं।");
थेनबिनह84

15
यदि आपके पास कोई विशिष्ट प्राप्तकर्ता नहीं है, तो यह भी काम करता है:Uri.fromParts("mailto", "", null)
Phil

25
यह मेरे एंड्रॉइड 4.3 पर किसी भी अधिक काम नहीं करता है। कृपया इरादे के रूप में ईमेल भेजने पर आधिकारिक एंड्रॉइड डॉक्टर की जांच करें, जो पूरी तरह से काम करता है: developer.android.com/guide/compords/…
marcwjj

244

तीन मुख्य दृष्टिकोण हैं:

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. कस्टम Uri:

Uri uri = Uri.parse("mailto:" + email)
    .buildUpon()
    .appendQueryParameter("subject", subject)
    .appendQueryParameter("body", body)
    .build();

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));

2. Intentअतिरिक्त का उपयोग करना :

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3. समर्थन पुस्तकालय ShareCompat:

Activity activity = /* Your activity here */

ShareCompat.IntentBuilder.from(activity)
    .setType("message/rfc822")
    .addEmailTo(email)
    .setSubject(subject)
    .setText(body)
    //.setHtmlText(body) //If you are using HTML in your body text
    .setChooserTitle(chooserTitle)
    .startChooser();

1
यह मेरे लिए बहुत बेहतर काम करता है - अन्य विकल्प संभव हैंडलर के रूप में कुछ सीधी चीजों (उदाहरण के लिए स्काइप) को पॉप अप करते हैं।
क्रिस राए

1
यदि आपके पास %बफर में एक प्रतीक है, तो परिणामस्वरूप ईमेल में कुछ वर्ण सही ढंग से एन्कोड नहीं किए जाएंगे। आपको Uri.encode@minipif द्वारा सुझाए गए नृत्य को करने की आवश्यकता है ।
गिउलिओ पियानकैसेली 15

12
यह यहां सबसे अच्छा उत्तर हैं, अपना समय दूसरों की कोशिश करने में बर्बाद न करें, दूसरा यहां वही है जो मैंने चुना है और यह पूरी तरह से काम करता है, केवल शुद्ध ईमेल ऐप्स दिखा रहा है, जीडीआरआरवाई नहीं, ब्लूटूथ नहीं .. आदि धन्यवाद @ becomputer06
ह्यूगो

1
"और" चरित्र के बारे में सावधान रहें। यदि आपको ईमेल बॉडी में & कैरेक्टर मिला है, तो ये तरीका & के बाद बॉडी को काट देगा। उदाहरण के लिए, यदि आप "I am & a sample body" जैसी बॉडी भेजते हैं, तो आपको बस "I am" मिलेगी
Emre Koç

4
ShareCompat का परिणाम लगभग सभी ऐप्स में है, न कि केवल ईमेल क्लाइंट्स में!
रपटबी

111

यह एंड्रॉइड आधिकारिक डॉक से उद्धृत किया गया है, मैंने इसे एंड्रॉइड 4.4 पर परीक्षण किया है, और पूरी तरह से काम करता है। Https://developer.android.com/guide/compenders/intents-common.html#Email पर अधिक उदाहरण देखें

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

6
माना! मुझे आश्चर्य है कि इस तरह का उत्तर अभी तक सूची से नीचे है। मुझे लगता है कि एंड्रॉइड डॉक्स में यह अपेक्षाकृत हाल ही में बदलाव रहा होगा।
मिकी

महान! भरोसेमंद एक, यह एंड्रॉइड ऐप डेवलपर्स के 'बाइबिल' को संदर्भित करता है।
dev_android

1
Mailto के बाद बृहदान्त्र ने मेरे लिए चाल चली! मैं "mailto:" के बजाय "mailto" का उपयोग कर रहा था
Nigel Crasto

1
5.1.1 पर काम कर रहा है। अन्य विकल्प मेरे लिए काम नहीं करते हैं।
जुआन जुआन

1
EXTRA_EMAILमेरे लिए काम नहीं कर रहा था इसलिए मैंने इस्तेमाल कियाUri.parse("mailto: " + myEmail)
प्रतीक बुटानी

89

एक देर से जवाब, हालांकि मैं एक समाधान है जो दूसरों की मदद कर सकता है:

जावा संस्करण

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


कोटलिन संस्करण

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


यह मेरा आउटपुट था (केवल Gmail + इनबॉक्स का सुझाव दिया गया था):

मेरा आउटपुट

मुझे यह समाधान एंड्रॉइड डेवलपर्स साइट से मिला है ।


2
मेरे लिए यह महत्वपूर्ण था कि mailtoईमेल और ईमेल के बीच कोई स्थान न हो :mailto:abc@xyz.com
AlvaroSantisteban

यह सही उत्तर है।
निबाना

36

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

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] { "me@somewhere.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");

startActivity(Intent.createChooser(intent, "Email via..."));

अर्थात ACTION_SENDTOक्रिया के बजाय क्रिया का उपयोग करें ACTION_SEND। मैंने इसे एंड्रॉइड 4.4 उपकरणों के एक जोड़े पर आज़माया है और यह चयनकर्ता पॉप-अप को केवल ईमेल अनुप्रयोगों (ईमेल, जीमेल, याहू मेल आदि) को प्रदर्शित करने के लिए सीमित करता है और यह ईमेल में ईमेल पते और विषय को सही ढंग से सम्मिलित करता है।


35

प्रयत्न:

intent.setType("message/rfc822");

वह सही है, मैंने इसे आज़माया और [ड्राइव, ईमेल, जीमेल, स्काइप] प्रदान करता है, यह "सही उत्तर" होना चाहिए
gurbieta

18
भेजने के ऑपरेशन को करने के लिए MIME प्रकार का उपयोग करना एक बुरा विचार है, क्योंकि आप मूल रूप से एंड्रॉइड को उन ऐप्स की सूची प्रदान करने का निर्देश दे रहे हैं जो टाइप की फ़ाइल भेजने का समर्थन करते हैं message/rfc822। यह ई-मेल भेजने जैसा नहीं है। mailto:इसके बजाय प्रोटोकॉल का उपयोग करें , क्योंकि यही ई-मेल क्लाइंट वास्तव में समझते हैं।
पॉल लामर्ट्स्मा

34

ई-मेल आशय को भेजने के लिए यह उचित तरीका है Android डेवलपर आधिकारिक दस्तावेज के

कोड की इन पंक्तियों को अपने ऐप में जोड़ें:

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

वैकल्पिक: शरीर और विषय को इस तरह जोड़ें

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

आपने पहले ही इस पंक्ति को जोड़ लिया है, लेकिन नए उपयोगकर्ताओं के लिए अच्छा है

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

यह प्राप्तकर्ता का पता होगा, जिसका अर्थ है कि उपयोगकर्ता आपको (डेवलपर) एक ई-मेल भेजेगा।


@ barnacle.m धन्यवाद! यह भी अधिक सरल तरीकों में से एक है। समस्या यह है कि मेरे उत्तर में पर्याप्त उत्थान नहीं है :(
अवि दर्शन

1
ऐसा इसलिए है क्योंकि इसमें बहुत सारे समान उत्तर हैं, लेकिन यह इस मामले पर आधिकारिक एंड्रॉइड प्रलेखन को इंगित करता है।
barnacle.m

1
मैं ईमेल पता भेजने में असमर्थ था। मैंने इसे इस आशय के रूप में तय किया था। डेटा = उड़ी.परसे ("mailto: somemail@xyz.com")
हितेश बिष्ट

18

अंत में सबसे अच्छा तरीका है के साथ आते हैं

String to = "test@gmail.com";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
        "?&subject=" + Uri.encode(subject) +
        "&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);

आप कमाल के हैं, यार।
आशिक

कोई बात नहीं दोस्त
अजय श्रेष्ठ

2
अच्छी तरह से काम।
सोलंकी कमलेश

इस लेख को देखें जो इसे विस्तार से बताता है: medium.com/@cketti/…
Bruno Bieri

अच्छी तरह से काम करता है, इसे बनाए रखें
जैक

15

यदि आप केवल ईमेल क्लाइंट चाहते हैं, तो आपको android.content.Intent.EXTRA_EMAILएक सरणी के साथ उपयोग करना चाहिए । यहाँ एक उदाहरण दिया गया है:

final Intent result = new Intent(android.content.Intent.ACTION_SEND);
result.setType("plain/text");
result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient });
result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
result.putExtra(android.content.Intent.EXTRA_TEXT, body);

3
नहीं, फिर भी कई अन्य ऐप लाता हैACTION_SENDTO
डोरी

10

निम्नलिखित कोड मेरे लिए ठीक काम करता है।

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"});
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);

8

से Android डेवलपर डॉक्स :

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

8

संपादित करें: जीमेल के नए संस्करणों के साथ अब और काम नहीं कर रहा है

किसी भी किरदार के साथ काम करने के लिए मुझे यही समय मिला।

डॉरमोन का जवाब अब जाने का सही तरीका है, क्योंकि यह जीमेल के नए संस्करणों में सभी पात्रों के साथ काम करता है।

पुराना उत्तर:


यह रहा मेरा। यह सभी एंड्रॉइड संस्करणों पर काम करता है, विषय और संदेश बॉडी सपोर्ट और पूर्ण utf-8 वर्ण समर्थन के साथ:

public static void email(Context context, String to, String subject, String body) {
    StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to));
    if (subject != null) {
        builder.append("?subject=" + Uri.encode(Uri.encode(subject)));
        if (body != null) {
            builder.append("&body=" + Uri.encode(Uri.encode(body)));
        }
    }
    String uri = builder.toString();
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
    context.startActivity(intent);
}

1
+1 Uri.encodeजाने का सही तरीका है। लेकिन इसे विषय और शरीर के लिए दो बार क्यों कहा जाता है?
गिउलिओ पियानकैसेली 15

तो, अपने आप को एन्कोडिंग करना एक बुरा विचार है। आवश्यक एक्सट्रैस के साथ बेहतर इंटेंट का उपयोग करें, उदाहरण के लिए देखें stackoverflow.com/a/15022222
Giulio Piancastelli

मेरे लिए यह सबसे अच्छा उत्तर है क्योंकि अन्य समाधान केवल कुछ ईमेल ऐप के साथ ही सही ढंग से काम करते हैं। यह हर उस ईमेल ऐप के साथ काम करता है जिसे मैंने परीक्षण किया था।
इगिस

7

इनमें से कोई भी समाधान मेरे लिए काम नहीं कर रहा था। यहाँ एक न्यूनतम समाधान है जो लॉलीपॉप पर काम करता है। मेरे डिवाइस पर, परिणामी चयनकर्ता सूची में केवल जीमेल और देशी ईमेल ऐप दिखाई देते हैं।

Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
                                Uri.parse("mailto:" + Uri.encode(address)));

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(emailIntent, "Send email via..."));

7

सभी Android संस्करणों पर काम करता है:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .buildUpon()
            .appendQueryParameter("subject", "subject")
            .appendQueryParameter("body", "body")
            .build();
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

आपके जवाब से मुझे मदद मिली। धन्यवाद
अदनान खान

5

निम्नलिखित कोड मेरे लिए काम किया !!

import android.support.v4.app.ShareCompat;
    .
    .
    .
    .
final Intent intent = ShareCompat.IntentBuilder
                        .from(activity)
                        .setType("application/txt")
                        .setSubject(subject)
                        .setText("Hii")
                        .setChooserTitle("Select One")
                        .createChooserIntent()
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
                        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

activity.startActivity(intent);

5

यह मेरे लिए पूरी तरह से ठीक काम करता है:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));

5

यदि आप यह सुनिश्चित करना चाहते हैं कि आपका इरादा केवल एक ईमेल ऐप (और अन्य टेक्स्ट मैसेजिंग या सोशल ऐप) द्वारा नियंत्रित किया जाता है, तो ACTION_SENDTOकार्रवाई का उपयोग करें और "mailto:" डेटा योजना शामिल करें। उदाहरण के लिए:

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

मुझे यह https://developer.android.com/guide/compents/intents-common.html#Email पर मिला


5

में Kotlin अगर कोई देख रहा है

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

4

इनमें से अधिकांश उत्तर केवल एक साधारण मामले के लिए काम करते हैं जब आप अनुलग्नक नहीं भेज रहे हैं । मेरे मामले में मुझे कभी-कभी अनुलग्नक (ACTION_SEND) या दो अनुलग्नक (ACTION_SEND_MULTIPLE) भेजने की आवश्यकता है।

इसलिए मैंने इस धागे से सर्वश्रेष्ठ दृष्टिकोण लिया और उन्हें संयुक्त किया। यह समर्थन लाइब्रेरी का उपयोग कर ShareCompat.IntentBuilderरहा है, लेकिन मैं केवल ऐसे ऐप दिखाता हूं जो "mailto:" uri के साथ ACTION_SENDTO से मेल खाते हैं। इस तरह मुझे केवल अनुलग्नक समर्थन वाले ईमेल ऐप्स की सूची प्राप्त होती है:

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}

ऐसा लगता है कि यह उपयोगी हो सकता है; जावा में इसे पाने का कोई मौका?
काइल हमफील्ड

1
कोटलिन जावा के समान है, आपको पेस्ट कॉपी करने और कुछ चीजों को बदलने में सक्षम होना चाहिए।
डेविड वेवरा

3

उपयोग करना intent.setType("message/rfc822");काम करता है लेकिन यह अतिरिक्त ऐप दिखाता है जो जरूरी नहीं कि ईमेल को संभालता है (जैसे GDrive)। का उपयोग Intent.ACTION_SENDTOके साथ setType("text/plain")सबसे अच्छा है, लेकिन आप जोड़ने के लिए setData(Uri.parse("mailto:"))सबसे अच्छा परिणाम (केवल ईमेल क्षुधा) प्राप्त करने के लिए। पूरा कोड इस प्रकार है:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));

परिपूर्ण
आत्माभिषेक

2

यदि आप Gmail को लक्षित करना चाहते हैं तो आप निम्नलिखित कार्य कर सकते हैं। ध्यान दें कि आशय "ACTION_SENDTO" है न कि "ACTION_SEND" और अतिरिक्त आशय फ़ील्ड जीमेल के लिए आवश्यक नहीं हैं।

String uriText =
    "mailto:youremail@gmail.com" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}

2

मैं कोटलिन में आदिल के जवाब को अपडेट कर रहा हूं,

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "test@email.com" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}

यह तब भी विफल रहता है जब जीमेल ऐप पर होता है।
AndroidDev

@AndroidDev आप किस डिवाइस में समस्या का सामना कर रहे हैं?
किशन सोलंकी

2

कृपया नीचे दिए गए कोड का उपयोग करें:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }

1

शायद आपको यह कोशिश करनी चाहिए: intent.setType("plain/text");

मैंने इसे यहां पाया । मैंने इसे अपने ऐप में उपयोग किया है और यह केवल ई-मेल और जीमेल विकल्प दिखाता है।


2
"सादा / पाठ" ब्लूटूथ, स्काइप इत्यादि दिखाता है। एंड्रॉइड मार्केट ऐप में वांछित आउटपुट चेकआउट करें। चरण को प्रश्न में सूचीबद्ध किया गया है।
दीरा

1
Send ऑपरेशन करने के लिए MIME टाइप का उपयोग करना एक बुरा विचार है, क्योंकि आप मूल रूप से एंड्रॉइड को उन ऐप्स की सूची प्रदान करने का निर्देश दे रहे हैं plain/text, जो टाइप की फ़ाइल भेजने का समर्थन करते हैं , और यह एक मान्य MIME प्रकार भी नहीं है। यह ई-मेल भेजने जैसा नहीं है। mailto:इसके बजाय प्रोटोकॉल का उपयोग करें , क्योंकि यही ई-मेल क्लाइंट वास्तव में समझते हैं।
पॉल लामर्ट्स्मा

1

फोन ईमेल क्लाइंट में एक ईमेल लिखें:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

इसे इस्तेमाल करो:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

बिल्ड ग्रेडेल का उपयोग करें:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'

1

यह वही है जो मैं उपयोग करता हूं, और यह मेरे लिए काम करता है:

//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";

//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);

startActivity(variableName);

यह उपयोगकर्ता को अपना पसंदीदा ईमेल ऐप चुनने की सुविधा भी देगा। केवल एक चीज जो आपको ऐसा करने की अनुमति नहीं देती है वह है प्राप्तकर्ता का ईमेल पता सेट करना।


आपको "दूसरी पंक्ति याद आ रही है ।
टिम

1

यह कोड मेरे डिवाइस में काम कर रहा है

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

यह केवल मेरे उपकरण में Gmail और ईमेल खोलता है
Mahen

1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.