android ईमेल इरादा भेजें




email android-intent (20)

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

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

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

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

मैंने 'एंड्रॉइड मार्केट' एप्लिकेशन पर ऐसा उदाहरण देखा है।

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

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


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

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

यह एंड्रॉइड आधिकारिक दस्तावेज़ से उद्धृत किया गया है, मैंने इसे एंड्रॉइड 4.4 पर परीक्षण किया है, और पूरी तरह से काम करता है। Https://developer.android.com/guide/components/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);
    }
}

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

यह एकमात्र तरीका था जिसे मैंने किसी भी पात्र के साथ काम करने के लिए पाया था।

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

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

यह रहा मेरा। यह सभी एंड्रॉइड संस्करणों पर काम करता है, विषय और संदेश शरीर समर्थन के साथ, और पूर्ण 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);
}

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

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

सभी एंड्रॉइड संस्करणों पर काम करता है:

String[] TO = {"[email protected]"};
    Uri uri = Uri.parse("mailto:[email protected]")
            .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..."));

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

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


यदि आप केवल ईमेल क्लाइंट चाहते हैं तो आपको एक सरणी के साथ 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);

जब आप अपना इरादा बदल देंगे .setType नीचे की तरह आप पाएंगे

intent.setType("text/plain");

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

new Intent(Intent.ACTION_SENDTO);

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

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

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

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


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

boolean success = EmailIntentBuilder.from(activity)
        .to("[email protected]")
        .cc("[email protected]")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

निर्माण ग्रेड का उपयोग करें:

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

एक देर का जवाब, हालांकि मुझे एक समाधान पता चला जो दूसरों की मदद कर सकता था

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto: [email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));

यह मेरा आउटपुट था (जीमेल + इनबॉक्स और कुछ और नहीं)

मुझे Google डेवलपर साइट से यह समाधान मिला है


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

    String to = "[email protected]";
    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);

प्रयत्न:

intent.setType("message/rfc822");

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

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

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

String uriText =
    "mailto:[email protected]" + 
    "?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")); 
}

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

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

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

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

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
}

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

//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);

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


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

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

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

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

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

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

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

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





android-intent