Send Email Intent Send Email Intent android android

Send Email Intent


UPDATE

Official approach:

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

Ref link

OLD ANSWER

The accepted answer doesn't work on the 4.1.2. This should work on all platforms:

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

Update: According to marcwjj, it seems that on 4.3, we need to pass string array instead of a string for email address to make it work. We might need to add one more line:

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


There are three main approaches:

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

1. Custom 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. Using Intent extras:

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 textstartActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3. Support Library 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();


when you will change your intent.setType like below you will get

intent.setType("text/plain");

Use android.content.Intent.ACTION_SENDTO to get only the list of e-mail clients, with no facebook or other apps. Just the email clients.Ex:

new Intent(Intent.ACTION_SENDTO);

I wouldn't suggest you get directly to the email app. Let the user choose his favorite email app. Don't constrain him.

If you use ACTION_SENDTO, putExtra does not work to add subject and text to the intent. Use Uri to add the subject and body text.

EDIT:We can use message/rfc822 instead of "text/plain" as the MIME type. However, that is not indicating "only offer email clients" -- it indicates "offer anything that supports message/rfc822 data". That could readily include some application that are not email clients.

message/rfc822 supports MIME Types of .mhtml, .mht, .mime