如何发送HTML电子邮件

37

我找到了一种使用Intent发送纯文本电子邮件的方法:

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain"); 
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new     
String[]{"example@mail.com"}); 
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Test");

但我需要发送带有HTML格式的文本。
尝试使用setType("text/html")无效。


相关的 Stack Overflow 问题:https://dev59.com/GnI-5IYBdhLWcg3wFkSO - fupsduck
最好使用用户已经添加的帐户设置。 - Denis Palnitsky
6个回答

51

您可以在extra中传递Spanned文本。为了确保意图仅解析到处理电子邮件的活动(例如Gmail和Email应用程序),您可以使用以mailto方案开头的Uri与ACTION_SENDTO结合使用。如果您事先不知道收件人,这也将起作用:

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

8
@Orsol,是的,这个方法有点用。如果你想要格式化的邮件,这个方法可以使用,但是我想添加一个链接,可惜没有成功:( - Phil
1
问题在于,虽然它可以在Gmail中使用,但并不适用于所有电子邮件客户端。因此,如果您需要在其中放置链接,并且除了Gmail之外的其他人也可以获取它,则无法使用您的解决方案。 - MinceMan
3
同意。如果用户选择使用Gmail发送邮件,这将起作用。但是标准的Android邮箱应用程序会删除HTML格式,包括链接。应该有一种方法为客户端提供HTML和备选文本。但我不知道如何做到这一点。 - Andrew Arnott
3
我注意到在Gmail应用程序和标准的Android电子邮件应用程序中,标签<Table>不能工作。也就是说,它不会被格式化为表格。 - superlinux
2
Html.fromHtml在Android N+中已被弃用。 - Daniele D.
显示剩余4条评论

4

我试图通过Gmail应用程序发送HTML一段时间了,所以决定留下一些见解,以防有人遇到类似的问题。

无论我做了什么,似乎都无法让HTML文本加粗。然后我尝试切换到Outlook客户端,惊讶的是它可以正常工作。HTML标记也在其他旧设备上工作正常,但在我的设备(Galaxy S7 API 26)上不起作用。因此,我认为Gmail应用程序似乎已经放弃了支持来自意图的HTML语法,或者现在需要以某种非常特定的方式提供它,这并没有明确说明。

最后,对我有效的gmail版本是6.9.25... 在Nexus 5X API 25模拟器(Nougat)上。从版本7.5.21开始,在Nexus 5x API 26模拟器(Oreo)上就不再起作用了。


3
这对我HTML非常有帮助,但ACTION_SENDTO并没有像我期望的那样工作-我收到了一个“不支持该操作”的消息。我在这里发现了一个变体,可以解决这个问题:

http://www.coderanch.com/t/520651/Android/Mobile/no-application-perform-action-when

下面是结合这两个的代码:
String mailId="yourmail@gmail.com";
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..."));

4
你测试过这个了吗?在模拟器上的原生安卓邮件客户端(而不是Gmail)中看起来很好,但当发送到Gmail帐户时,文本似乎没有样式。此外,你提供的链接也无法查看。 - tos

2

我还没有开始进行Android开发,但是意图(Intent)的文档中提到,如果你使用EXTRA_TEXT,MIME类型应该是text/plain。看起来,如果你想看到HTML,你需要使用EXTRA_STREAM。


这个部分有效。我附加了文件,但在结果信中它的MIME类型总是text\plain。我尝试设置emailIntent.setType("html/text");但没有成功。 - Denis Palnitsky

-1

它说需要提供EXTRA_TEXT(请注意,您还必须提供EXTRA_TEXT)。但是这对于电子邮件无效。 - Daniel F

-3

尝试在文本区域中添加一些HTML代码怎么样?

emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "<strong>Test</strong>");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接