Question

I want to send out an email from my app. So I used the following code.

String uriText = "abcd@gmail.com" + "?subject=" + URLEncoder.encode("Subject") + "&body=" + URLEncoder.encode("some text here");
Uri uri = Uri.parse(uriText);
Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
startActivity(Intent.createChooser(sendIntent, "Send Email"));

I have configured both my Gmail and EMail applications. I tested on my Nexus S (JellyBean) and HTC T-Mobile G2 (GingerBread). Both of them shows "No apps can perform this action.".

Does anyone have idea what's wrong here?

Was it helpful?

Solution

If you are going to use ACTION_SENDTO, the Uri should use the mailto: or smsto: scheme. So, try mailto:abcd@gmail.com.

OTHER TIPS

if you are using Intent.setData for sending email then change your code as:

String uriText = "mailto:someone@example.com" +
                 "?subject=" + URLEncoder.encode("Subject") + 
                 "&body=" + URLEncoder.encode("some text here");
Uri uri = Uri.parse(uriText);
Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
startActivity(Intent.createChooser(sendIntent, "Send Email"));

Uri should be "mailto"

 Intent intent = new Intent(Intent.ACTION_SENDTO);  
 intent.setData(Uri.parse("mailto:"));  
 intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmail.com"});  
 intent.putExtra(Intent.EXTRA_SUBJECT,"Order summary of Coffee");
 intent.putExtra(Intent.EXTRA_TEXT,BodyOfEmail);

 if(intent.resolveActivity(getPackageManager())!=null) {
            startActivity(intent);
        }

The following code worked for me and is a lot more reliable and flexible. Also, it's written in Kotlin :)

fun sendEmail(context: Context, mailTo: String? = null, subject: String? = null, bodyText: String? = null) {
    val emailIntent = Intent(Intent.ACTION_SENDTO)
    val uri = Uri.parse("mailto:${mailTo ?: ""}").buildUpon() // "mailto:" (even if empty) is required to open email composers
    subject?.let { uri.appendQueryParameter("subject", it) }
    bodyText?.let { uri.appendQueryParameter("body", it) }
    emailIntent.data = uri.build()
    try {
        context.startActivity(emailIntent)
    } catch (e: ActivityNotFoundException) {
        // Handle error properly
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top