如何发送 HTML 电子邮件
Posted
技术标签:
【中文标题】如何发送 HTML 电子邮件【英文标题】:How to send HTML email 【发布时间】:2011-01-01 17:27:42 【问题描述】:我找到了一种使用意图发送纯文本电子邮件的方法:
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") 不起作用。
【问题讨论】:
相关SO问题:***.com/questions/2020088/… 首选使用用户已添加的帐户设置。 【参考方案1】:尝试在文本区域添加一些 html 怎么样?
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "<strong>Test</strong>");
【讨论】:
【参考方案2】:我还没有(还)开始 Android 开发,但是意图的 documentation 说如果你使用 EXTRA_TEXT,MIME 类型应该是 text/plain。似乎如果您想查看 HTML,则必须改用 EXTRA_STREAM...
【讨论】:
这部分有效。我附加了文件,但它的 MIME 类型总是 text\plain 在结果字母中。我试图设置 emailIntent.setType("html/text");没有运气。【参考方案3】:您可以在附加信息中传递Spanned
文本。为确保 Intent 仅解析为处理电子邮件的活动(例如 Gmail 和电子邮件应用程序),您可以使用 ACTION_SENDTO
和以 mailto 方案开头的 Uri。如果您事先不知道收件人,这也可以:
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())
);
【讨论】:
@Orsol,是的,这有点用。如果您想要格式化的电子邮件,这确实有效,但是我想添加一个链接,但不幸的是它不起作用:( glo 问题在于,虽然它适用于 gmail,但它不适用于每个电子邮件客户端。因此,如果您需要该链接并且 gmail 以外的其他人可以获取它,那么您将无法使用您的解决方案。 同意。如果用户选择 Gmail 来发送邮件,这将起作用。但是标准的 Android 邮件应用程序只是删除了包括链接在内的 HTML 格式。应该有一种方法可以为客户端提供 HTML 和备用文本。但我不知道怎么做。 我注意到标签这对我的 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..."));
【讨论】:
你测试过这个吗?这在模拟器(不是 Gmail)上的本机 android 电子邮件客户端中看起来不错,但在发送到 gmail 帐户时文本不会出现样式。此外,您提供的链接 URL 不可见。【参考方案5】:您必须将“EXTRA_HTML_TEXT”更改为“EXTRA_HTML_TEXT”
https://developer.android.com/reference/android/content/Intent.html#EXTRA_HTML_TEXT
【讨论】:
它说 EXTRA_TEXT 是必需的(请注意,您还必须提供 EXTRA_TEXT)。但这不适用于电子邮件。【参考方案6】:一段时间以来一直在尝试通过 gmail 应用程序发送 html,因此决定对我的发现留下一些见解,以防其他人遇到类似问题。
似乎无论我做什么,我都无法让 html 中包含粗体文本。 然后我尝试切换到 Outlook 客户端,令我惊讶的是它工作得很好。 Html 标记也在其他较旧的设备上工作,但不适用于我的(galaxy s7 API 26),所以我想,gmail 应用程序似乎已经放弃了对来自意图的 html 语法的支持,或者现在你需要提供它以一些没有明确记录的非常具体的方式。
对我有用的上一个 gmail 版本是 6.9.25 版...在 Nexus 5X API 25 模拟器(牛轧糖)上 它从 7.5.21 版开始停止工作......在 Nexus 5x API 26 模拟器(奥利奥)上
【讨论】:
以上是关于如何发送 HTML 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaMail 发送带有附件的 html 电子邮件