Intent.EXTRA_EMAIL not populating the To field

AndroidAndroid Intent

Android Problem Overview


I am trying to use an [tag:intent] to send an email from my application but the To field of the email will not populate. If I add code to fill in the subject or text, they work fine. Just the To field will not populate.

I have also tried changing the type to "text/plain" and "text/html" but I get the same problem. Can anyone help please?

public void Email(){

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");	//set the email recipient
    String recipient = getString(R.string.IntegralEmailAddress);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL  , recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); }

The email client I'm trying to use is Gmail

Android Solutions


Solution 1 - Android

I think you are not passing recipient as array of string

it should be like

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "[email protected]" });

Solution 2 - Android

Use this

public void Email(){
    // use this to declare your 'recipient' string and get your email recipient from your string xml file
    Resources res = getResources();
    String recipient = getString(R.string.IntegralEmailAddress);
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 

``}

This will work :)
This is what android documentation says about Intent.Extra_Email
-A string array of all "To" recipient email addresses.
So you should feed string properly You can read more over here
http://developer.android.com/guide/components/intents-common.html#Email and here http://developer.android.com/guide/topics/resources/string-resource.html Or use the ACTION_SENDTO action and include the "mailto:" data scheme. For example:

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

Solution 3 - Android

In Kotlin - Android

fun sendMail(
        activity: Activity,
        emailIds: Array<String>,
        subject: String,
        textMessage: String
    ) {


        val emailIntent = Intent(Intent.ACTION_SEND)
        emailIntent.type = "text/plain"
        emailIntent.putExtra(Intent.EXTRA_EMAIL, emailIds)
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
        emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage)
        emailIntent.setType("message/rfc822")
        try {
            activity.startActivity(
                Intent.createChooser(
                    emailIntent,
                    "Send email using..."
                )
            )
        } catch (ex: ActivityNotFoundException) {
            Toast.makeText(
                activity,
                "No email clients installed.",
                Toast.LENGTH_SHORT
            ).show()
        }
    }

> Also you can use [ val emailIntent = Intent(Intent.ACTION_SENDTO) ] to invoke direct email > client

//argument of function
val subject = "subject of you email"
val eMailMessageTxt = "Add Message here"

val eMailId1 = "[email protected]"
val eMailId2 = "[email protected]"
val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)

//Calling function
sendMail(this, eMailIds, subject, eMailMessageTxt)

I hope this code snippet will help to kotlin developers.

Solution 4 - Android

Couple of things:

1 - You need to set the action constant variable as ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - If you want it to be opened by only the mail then use the setData() method: intentEmail.setData(Uri.parse("mailto:")); Otherwise it will ask you to open it as text, image, audio file by other apps present on your device.

3 - You need to pass the email ID string as an array object and not just as a string. String is: "[email protected]". Array Object of the string is: new String[] {"email1", "email2", "more_email"}.

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]", "[email protected]"});

Solution 5 - Android

private void callSendMeMail() {
    Intent Email = new Intent(Intent.ACTION_SEND);
    Email.setType("text/email");
    Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
    Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
}

Solution 6 - Android

Made me waste so much time! Thanks to the accepted answer! I'll add some Kotlin code with a couple of handy extension functions

fun Activity.hasEmailClient(): Boolean =
    emailIntent("someAddress", "someSubject", "someText")
        .resolveActivity(packageManager) != null

fun Activity.openEmailClient(address: String, subject: String, text: String) {
    startActivity(emailIntent(address, subject, text))
}

private fun emailIntent(address: String, subject: String, text: String): Intent =
    Intent(Intent.ACTION_SENDTO).apply {
        type = "text/plain"
        data = Uri.parse("mailto:")
        putExtra(Intent.EXTRA_EMAIL, arrayOf(address))
        putExtra(Intent.EXTRA_SUBJECT, subject)
        putExtra(Intent.EXTRA_TEXT, text)
    }

feel free to replace Activity with Fragment if it suits your needs. Example usage:

if (hasEmailClient()) {
    openEmailClient(
        "[email protected]",
        "this is the subject",
        "this is the text"
    )
}

Solution 7 - Android

This is what works for me:

val email = "[email protected]"
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:$email")
intent.putExtra(Intent.EXTRA_SUBJECT,"My Subject")
startActivity(intent)

Solution 8 - Android

First you should set the value of Intent.EXTRA_EMAIL as Array of Strings type like this:

emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });

If this not works then simply uninstall the app and again Run....

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionuserView Question on Stackoverflow
Solution 1 - AndroidMKJParekhView Answer on Stackoverflow
Solution 2 - AndroidNimesh JainView Answer on Stackoverflow
Solution 3 - AndroidV-9-दView Answer on Stackoverflow
Solution 4 - Androidrohegde7View Answer on Stackoverflow
Solution 5 - AndroidYuliia AshomokView Answer on Stackoverflow
Solution 6 - AndroidvoghDevView Answer on Stackoverflow
Solution 7 - AndroidBréndal TeixeiraView Answer on Stackoverflow
Solution 8 - AndroidMd. Adnan YounusView Answer on Stackoverflow