How to send HTML email
Solution 1
You can pass Spanned
text in your extra. To ensure that the intent resolves only to activities that handle email (e.g. Gmail and Email apps), you can use ACTION_SENDTO
with a Uri beginning with the mailto scheme. This will also work if you don't know the recipient beforehand:
final Intent shareIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
shareIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<small><p>More content</p></small>")
.toString())
);
Solution 2
Been trying to send html via gmail app for a while, so decided to leave some insight on what I found, just in case someone else is having similar issues.
Seems like no matter what I did, I couldn't get the html to have bold text in it. Then I've tried switching to outlook client and to my surprise it was working just fine. Html markup was also working on other older devices, but not on mine (galaxy s7 API 26), so I figured, that gmail app seems to have dropped support for html syntax that comes from intent or maybe now you're required to provide it in some very specific way which is not clearly documented.
Last gmail version that worked for me was version 6.9.25... on Nexus 5X API 25 emulator (Nougat) And it stopped working starting version 7.5.21... On Nexus 5x API 26 emulator (Oreo)
Solution 3
This was very helpful to me for the HTML, but the ACTION_SENDTO didn't quite work for me as is - I got an "action not supported" message. I found a variant here which does:
http://www.coderanch.com/t/520651/Android/Mobile/no-application-perform-action-when
And here's my code which combines the two together:
String mailId="[email protected]";
Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts("mailto",mailId, null));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject text here");
// you can use simple text like this
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"Body text here");
// or get fancy with HTML like this
emailIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<a>http://www.google.com</a>")
.append("<small><p>More content</p></small>")
.toString())
);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
Solution 4
I haven't (yet) started Android development, but the documentation for the intent says that if you use EXTRA_TEXT, the MIME type should be text/plain. Seems like if you want to see HTML, you'd have to use EXTRA_STREAM instead...
Denis Palnitsky
Experienced product engineer, architect, and team lead
Updated on September 27, 2020Comments
-
Denis Palnitsky over 3 years
i found a way to send plain text email using intent:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Test");
But I need to send HTML formatted text.
Trying to setType("text/html") doesn't work. -
Denis Palnitsky over 14 yearsThis works partly. I attached file but it MIME type always text\plain in resulting letter. I tried to set emailIntent.setType("html/text"); with no luck.
-
Denis Palnitsky about 13 yearsHas anybody tested that solution? I have no possibility to check it now so please add a comment if it works and I will mark this as right answer.
-
Phil almost 13 years@Orsol, Yes this works sort of. If you want formatted email, this does work, however I wanted to add a link, which unfortunately did not work:(
-
tos about 12 yearsHave you tested this ? This looks fine in the native android email client on the emulator (not Gmail) but text does not appear styled when sent to a gmail account. In addition, the linked URL you give isn't visible.
-
glo over 11 yearsyou can add link using the following
shareIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(new StringBuilder() .append("</a> <br><br><a href = \"https://example.com\">https://example.com</a>").toString()) );
-
MinceMan almost 11 yearsglo the problem with that is, while it works with gmail, it doesn't work with every email client. So if you need that link in there and someone other then gmail can grab it then you cannot use your solution.
-
Andrew Arnott over 10 yearsAgreed. This works if the user picks Gmail to send the message. But the standard Android Mail app just drops the HTML formatting including links. There should be a way to provide both HTML and fallback text for the client. But I don't know how.
-
superlinux almost 10 yearsI noticed that The tag <Table> does not work in both GMAIL app and the standard Android Email app. I mean it does not get formatted as a table.
-
Daniele D. about 6 yearsHtml.fromHtml is now deprecated in Android N+
-
cV2 over 5 yearsOver the years unfortunately all answers about this seem to be outdated.
-
Daniel F almost 5 yearsIt says EXTRA_TEXT is required (Note that you must also supply EXTRA_TEXT). Yet this doesn't work for email.
-
hmac almost 4 yearsgmail app seems to be ignoring most tags, including <b></b>