मेरे Android एप्लिकेशन से ईमेल कैसे भेजें?


जवाबों:


978

सबसे अच्छा (और सबसे आसान) तरीका है Intent:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

अन्यथा आपको अपना क्लाइंट लिखना होगा।


6
उपरोक्त कोड में, कोई प्रेषक ईमेल आईडी नहीं है। फिर संदेश कैसे भेजा जाता है?
किरन केजे

38
किरन: आपको यह समझने की ज़रूरत है कि इंटेंट्स इसे समझने के लिए कैसे काम करते हैं। यह मूल रूप से प्राप्तकर्ता, विषय और पहले से भरे हुए बॉडी के साथ एक ईमेल एप्लिकेशन खोलेगा। यह भेजने के लिए ईमेल ऐप पर निर्भर है।
जेरेमी लोगान

8
गतिविधि शुरू करके ईमेल "TO" फ़ील्ड में दिखाई नहीं दे रहा है। कोई जानता है?
हमजा वकास

11
इस टिप्पणी का महान योगदान है: संदेश / rfc822
गुइलहर्मे ओलिवेरा

22
यह सुनिश्चित करने के लिए कि चयनकर्ता केवल ईमेल ऐप प्रदर्शित करता है: Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
एड्रिस

194

उपयोग करें .setType("message/rfc822")या चयनकर्ता आपको सभी (कई) अनुप्रयोगों को दिखाएगा जो भेजने के इरादे का समर्थन करते हैं।


5
अच्छा, यह अधिक वोट tbh होना चाहिए। आप एमुलेटर पर परीक्षण को नोटिस नहीं करेंगे, लेकिन जब आप एक असली डिवाइस पर "टेक्स्ट / प्लेन" भेजने के लिए जाते हैं तो यह आपको 15+ ऐप्स की सूची देगा !! इसलिए "संदेश / rfc822" निश्चित रूप से अनुशंसित है (ईमेल मानक)।
ब्लंडेल

7
@ ब्लंडेल हाय, लेकिन मुझे बदलने के बाद कोई अंतर नहीं दिखाई दियाmessage/rfc822
ड्रा करें

2
क्या आप सूची से ब्लूटूथ हटा सकते हैं? यह भी इस प्रकार से पता चलता है। +1 हालांकि, स्वच्छ चाल!
इंग्श

4
हमारे बेकन को बचा लिया। ग्राहक को यह समझाने की कल्पना नहीं कर सकते कि उपयोगकर्ता उन्हें ईमेल करने के बजाय समर्थन अनुरोध ट्वीट कर सकता है।
केविन गैलिगन

1
+1111111 यह अंतहीन + 1 के योग्य है, इसलिए अन्य इसे देख सकते हैं। मैंने इस हिस्से को याद किया और कुछ समय के लिए इस समस्या से निपटना पड़ा!
ChallengeAccepted

89

मैं लंबे समय से इसका उपयोग कर रहा हूं और यह अच्छा लगता है, कोई भी गैर-ईमेल ऐप नहीं दिखा रहा है। ईमेल भेजने का एक और तरीका है:

Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:default@recipient.com")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);

1
बिना लाइसेंस की कार्रवाई: यह कार्रवाई वर्तमान में समर्थित नहीं है
erdomester

4
lgor G-> plz change from setType "(सादा / पाठ") से setType ("पाठ / सादा")
sachit

2
.setType ("संदेश / rfc822") पाठ / सादा नहीं
भूखे Androider

1
इस कोड को खुला ईमेल इरादा होगा? मैं उपयोगकर्ता @yuku को इरादे दिखाए बिना ईमेल कैसे भेज सकता हूं मैं ईमेल पर पासवर्ड भेजना चाहता
हूं


54

मैं संलग्न बाइनरी त्रुटि लॉग फ़ाइल के साथ ईमेल भेजने के लिए वर्तमान में स्वीकृत उत्तर की तर्ज पर कुछ का उपयोग कर रहा था। GMail और K-9 इसे ठीक-ठाक भेजते हैं और यह मेरे मेल सर्वर पर भी ठीक आता है। एकमात्र समस्या मेरी मेल क्लाइंट ऑफ़ थंडरबर्ड थी, जिसे संलग्न लॉग फ़ाइल को खोलने / सहेजने में परेशानी थी। वास्तव में यह बस शिकायत के बिना फ़ाइल को बचाने के लिए नहीं था।

मैंने इनमें से एक मेल के स्रोत कोड पर एक नज़र डाली और देखा कि लॉग फ़ाइल के अटैचमेंट (समझ में) माइम प्रकार था message/rfc822। बेशक कि लगाव एक संलग्न ईमेल नहीं है। लेकिन थंडरबर्ड उस छोटी सी त्रुटि को इनायत से सामना नहीं कर सकता। तो वह एक तरह का बमर था।

थोड़ा शोध और प्रयोग करने के बाद मैं निम्नलिखित समाधान के साथ आया:

public Intent createEmailOnlyChooserIntent(Intent source,
    CharSequence chooserTitle) {
    Stack<Intent> intents = new Stack<Intent>();
    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
            "info@domain.com", null));
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(i, 0);

    for(ResolveInfo ri : activities) {
        Intent target = new Intent(source);
        target.setPackage(ri.activityInfo.packageName);
        intents.add(target);
    }

    if(!intents.isEmpty()) {
        Intent chooserIntent = Intent.createChooser(intents.remove(0),
                chooserTitle);
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                intents.toArray(new Parcelable[intents.size()]));

        return chooserIntent;
    } else {
        return Intent.createChooser(source, chooserTitle);
    }
}

इसका उपयोग इस प्रकार किया जा सकता है:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
    ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");

startActivity(createEmailOnlyChooserIntent(i, "Send via email"));

जैसा कि आप देख सकते हैं, createEmailOnlyChooserIntent पद्धति को सही इरादे और सही माइम प्रकार के साथ आसानी से खिलाया जा सकता है।

यह तब उपलब्ध गतिविधियों की सूची से गुजरता mailtoहै जो एक ACTION_SENDTO प्रोटोकॉल आशय (जो केवल ईमेल ऐप हैं) का जवाब देते हैं और गतिविधियों की उस सूची के आधार पर एक चयनकर्ता का निर्माण करते हैं और सही Mime प्रकार के साथ मूल ACTION_SEND इरादे।

एक अन्य लाभ यह है कि स्काइप को अब सूचीबद्ध नहीं किया गया है (जो कि rfc822 माइम प्रकार का जवाब देने के लिए होता है)।


1
मैंने सिर्फ आपको कोड स्निपेट डाला है और यह ठीक काम करता है। इससे पहले कि Google डिस्क, स्काइप आदि जैसे सूचीबद्ध ऐप हैं, लेकिन क्या किसी अन्य एप्लिकेशन को कॉल किए बिना एप्लिकेशन से मेल भेजने का कोई तरीका नहीं है? मैं सिर्फ ईमेल क्लाइंट के बारे में लेख पढ़ता हूं कि @ रेने का ऊपर का पद लेकिन सिर्फ एक साधारण ईमेल भेजने के लिए बहुत जटिल लगता है
एलेक्स Cio

बहुत बढ़िया जवाब। मेरे पास स्काइप और Google ड्राइव भी साथ आ रहे थे ACTION_SENDऔर यह इसे सुंदर तरीके से प्रस्तुत करता है।
darrenp

1
ऊपर सबसे लोकप्रिय समाधान Skype और Vkontakte के रूप में अच्छी तरह से देता है। यह समाधान बेहतर है।
डेनिस कुतलुबाएव

क्या है क्रैशलॉगफाइल? यह कहां से शुरू हुआ? कृपया सीज करें
नौफल

@ नोफाल यह मेरे अपने कोड बेस से कुछ ही शेष है। यह Fileएक दुर्घटना लॉग फ़ाइल की ओर इशारा करते हुए एक उदाहरण है जो मेरे एंड्रॉइड ऐप्स को पृष्ठभूमि में बनाते हैं यदि कोई अनियोजित अपवाद था। उस उदाहरण को केवल यह बताना चाहिए कि ईमेल अनुलग्नक को कैसे जोड़ा जाए। आप बाहरी संग्रहण (उदाहरण के लिए एक छवि) से किसी अन्य फ़ाइल को भी संलग्न कर सकते हैं। आप crashLogFileकाम की मिसाल पाने के लिए उस लाइन को भी हटा सकते हैं ।
टिगुची

37

करने के लिए बस जाने के ईमेल ऐप्स को हल करने के लिए अपने इरादे आप डेटा के रूप में कार्रवाई के रूप में ACTION_SENDTO और इन्हें मेल निर्दिष्ट करने के लिए की जरूरत है।

private void sendEmail(){

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:" + "recipient@example.com")); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My email's subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "My email's body");

    try {
        startActivity(Intent.createChooser(emailIntent, "Send email using..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Activity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
    }

}

23

मैंने इस मुद्दे को कोड की सरल लाइनों के साथ हल किया जैसा कि एंड्रॉइड डॉक्यूमेंटेशन बताता है।

( https://developer.android.com/guide/compents/intents-common.html#Email )

सबसे महत्वपूर्ण ध्वज है: यह है ACTION_SENDTO, और नहींACTION_SEND

दूसरी महत्वपूर्ण पंक्ति है

intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***

वैसे, अगर आप एक खाली भेज Extra, if()अंत में काम नहीं करेगा और एप्लिकेशन ईमेल क्लाइंट शुरू नहीं होगा।

Android प्रलेखन के अनुसार। यदि आप यह सुनिश्चित करना चाहते हैं कि आपका इरादा केवल एक ईमेल ऐप (और अन्य टेक्स्ट मैसेजिंग या सोशल ऐप) द्वारा नियंत्रित किया जाता है, तो 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);
    }
}

21

एंड्रॉइड बीम और ब्लूटूथ जैसे ईमेल क्लाइंट का उपयोग नहीं करने वाले ऐप्स से मेल खाने .setType("message/rfc822")या उपयोग करने की रणनीति ACTION_SENDभी मेल खाती है ।

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

असमर्थित क्रिया

वह क्रिया वर्तमान में समर्थित नहीं है।

जैसा की नीचे दिखाया गया:

असमर्थित क्रिया: वह क्रिया वर्तमान में समर्थित नहीं है।

यह पता चला है कि एमुलेटर नामक गतिविधि के इरादे को हल com.android.fallback.Fallbackकरता है, जो उपरोक्त संदेश प्रदर्शित करता है। जाहिरा तौर पर यह डिजाइन द्वारा है।

यदि आप चाहते हैं कि आपका ऐप इसको दरकिनार करे तो यह आधिकारिक एमुलेटर पर भी सही तरीके से काम करता है, तो आप ईमेल भेजने की कोशिश करने से पहले इसकी जांच कर सकते हैं:

private void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO)
        .setData(new Uri.Builder().scheme("mailto").build())
        .putExtra(Intent.EXTRA_EMAIL, new String[]{ "John Smith <johnsmith@yourdomain.com>" })
        .putExtra(Intent.EXTRA_SUBJECT, "Email subject")
        .putExtra(Intent.EXTRA_TEXT, "Email body")
    ;

    ComponentName emailApp = intent.resolveActivity(getPackageManager());
    ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
    if (emailApp != null && !emailApp.equals(unsupportedAction))
        try {
            // Needed to customise the chooser dialog title since it might default to "Share with"
            // Note that the chooser will still be skipped if only one app is matched
            Intent chooser = Intent.createChooser(intent, "Send email with");
            startActivity(chooser);
            return;
        }
        catch (ActivityNotFoundException ignored) {
        }

    Toast
        .makeText(this, "Couldn't find an email app and account", Toast.LENGTH_LONG)
        .show();
}

डेवलपर दस्तावेज़ में अधिक जानकारी प्राप्त करें


13

ईमेल भेजना इंटेंट्स के साथ किया जा सकता है जिसके लिए किसी कॉन्फ़िगरेशन की आवश्यकता नहीं होगी। लेकिन फिर इसके लिए यूजर इंटरेक्शन की आवश्यकता होगी और लेआउट थोड़ा प्रतिबंधित होगा।

उपयोगकर्ता सहभागिता के बिना एक और अधिक जटिल ईमेल बनाएँ और भेजना अपने स्वयं के क्लाइंट के निर्माण पर जोर देता है। पहली बात यह है कि ईमेल के लिए सन जावा एपीआई उपलब्ध नहीं है। मुझे ईमेल बनाने के लिए अपाचे Mime4j लाइब्रेरी का लाभ उठाने में सफलता मिली है। Nilvec पर डॉक्स पर आधारित सभी ।


6

यहाँ नमूना कामकाजी कोड है जो एंड्रॉइड डिवाइस में मेल एप्लिकेशन खोलता है और कंपोज़िंग मेल में ऑटो टू-एड्रेस और सब्जेक्ट से भरा होता है ।

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:feedback@gmail.com"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

धन्यवाद। @ दर्शन के समाधान के साथ तुलना करते हुए, आप एक ईमेल सेट करते हैं setData(), और AVI सेट करते हैं putExtra()। दोनों काम कर रहे हैं। लेकिन अगर निकालें setDataऔर उपयोग केवल intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});, वहाँ एक होगा ActivityNotFoundException
कूलमाइंड

5

मैं अपने एप्लिकेशन में नीचे दिए गए कोड का उपयोग करता हूं। यह बिलकुल ईमेल क्लाइंट ऐप दिखाता है, जैसे जीमेल।

    Intent contactIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_to), null));
    contactIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    startActivity(Intent.createChooser(contactIntent, getString(R.string.email_chooser)));

5

यह आपको केवल ईमेल क्लाइंट (साथ ही किसी अज्ञात कारण से पेपाल) दिखाएगा

 public void composeEmail() {

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:"));
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    try {
        startActivity(Intent.createChooser(intent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
}

1
अच्छा समाधान! यह कई अनुपयुक्त अनुप्रयोगों (ज्यादातर "शेयर" के रूप में उपयोग किया जाता है) से बचा जाता है। intent.type = "message/rfc822"; intent.type = "text/html";इसे यहां न जोड़ें क्योंकि इससे अपवाद होगा।
कूलमाइंड


3

यह कार्य ईमेल भेजने के लिए पहला सीधा इरादा जीमेल है, अगर जीमेल नहीं मिला है तो इरादा चयनकर्ता को बढ़ावा दें। मैंने कई व्यावसायिक ऐप में इस फ़ंक्शन का उपयोग किया है और यह ठीक काम कर रहा है। आशा है इससे आपकी मदद होगी:

public static void sentEmail(Context mContext, String[] addresses, String subject, String body) {

    try {
        Intent sendIntentGmail = new Intent(Intent.ACTION_VIEW);
        sendIntentGmail.setType("plain/text");
        sendIntentGmail.setData(Uri.parse(TextUtils.join(",", addresses)));
        sendIntentGmail.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
        sendIntentGmail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentGmail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentGmail.putExtra(Intent.EXTRA_TEXT, body);
        mContext.startActivity(sendIntentGmail);
    } catch (Exception e) {
        //When Gmail App is not installed or disable
        Intent sendIntentIfGmailFail = new Intent(Intent.ACTION_SEND);
        sendIntentIfGmailFail.setType("*/*");
        sendIntentIfGmailFail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_TEXT, body);
        if (sendIntentIfGmailFail.resolveActivity(mContext.getPackageManager()) != null) {
            mContext.startActivity(sendIntentIfGmailFail);
        }
    }
}

1
बहुत बहुत धन्यवाद। मेरी जान बचाओ
androCoder-BD

2

सरल यह कोशिश करो

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonSend = (Button) findViewById(R.id.buttonSend);
    textTo = (EditText) findViewById(R.id.editTextTo);
    textSubject = (EditText) findViewById(R.id.editTextSubject);
    textMessage = (EditText) findViewById(R.id.editTextMessage);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String to = textTo.getText().toString();
            String subject = textSubject.getText().toString();
            String message = textMessage.getText().toString();

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
            // email.putExtra(Intent.EXTRA_CC, new String[]{ to});
            // email.putExtra(Intent.EXTRA_BCC, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));

        }
    });
}

3
जब आप इसे पोस्ट करते हैं तो यह पहले से मौजूद उत्तरों की तुलना में कैसे बेहतर है? यह सिर्फ एक गतिविधि में लिपटे हुए स्वीकृत उत्तर की एक प्रति की तरह दिखता है।
सैम

2

अन्य समाधान हो सकता है

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("plain/text");
emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"someone@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Yo");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi");
startActivity(emailIntent);

ज्यादातर Android डिवाइस की मानें तो GMail ऐप पहले से इंस्टॉल है।


@PedroVarela हम हमेशा अपवाद नहीं मिला गतिविधि की जाँच कर सकते हैं।
silentsudo

1
हाँ हम कर सकते हैं। लेकिन आपका समाधान सही नहीं है। एंड्रॉइड डॉक्यूमेंटेशन में स्पष्ट रूप से बताया गया है कि इरादे वाले चयनकर्ता में केवल मेल ऐप दिखाने के लिए आपको क्या करना है। आपने लिखा है "अधिकांश एंड्रॉइड डिवाइस में जीमेल ऐप पहले से इंस्टॉल है"; क्या होगा अगर यह एक रूटेड डिवाइस है और उपयोगकर्ता जीमेल क्लाइंट को हटा देता है ?। मान लीजिए कि आप अपना खुद का ईमेल ऐप बना रहे हैं ?, अगर कोई उपयोगकर्ता ई-मेल भेजने वाला है तो आपका ऐप उस सूची में नहीं होगा। अगर gmail पैकेज का नाम बदल दे तो क्या होगा? क्या आप अपना ऐप अपडेट करने जा रहे हैं?
पेड्रो वरेला

2

ईमेल भेजने के लिए इसका उपयोग करें ...

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'

2

मैंने डिफॉल्ट मेल ऐप कंपोज़ सेक्शन सीधे लॉन्च करके मेल भेजने के लिए इस कोड का इस्तेमाल किया।

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setType("message/rfc822"); 
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"test@gmail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }

1

यह विधि मेरे लिए काम करती है। यह जीमेल ऐप खोलें (यदि इंस्टॉल किया गया है) और मेल्टो सेट करें।

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
    activity.startActivity(emailIntent);
}

1
/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}

1
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","ebgsoldier@gmail.com", null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Forgot Password");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Write your Pubg user name or Phone Number");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));**strong text**

1

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

String mailto = "mailto:bob@example.org" +
    "?cc=" + "alice@example.com" +
    "&subject=" + Uri.encode(subject) +
    "&body=" + Uri.encode(bodyText);

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));

try {
    startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
    //TODO: Handle case where no email app is available
}

उपर्युक्त कोड उपयोगकर्ताओं के पसंदीदा ईमेल क्लाइंट को ईमेल भेजने के लिए तैयार कर देगा।

स्रोत

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