Android如何发送HTML电子邮件并强制Android通过G-Mail发送它而不是其他应用程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (76)

我想通过我的应用程序发送电子邮件。我需要通过G-Mail发送基于HTML的电子邮件。我发现以下解决方案,他们每个人都有优点和缺点。

1)使用意图(Intent.ACTION_SEND)。这是非常简单的方式,我可以看到我的bodyHTML格式,但问题是,当我点击“发送电子邮件”按钮,许多应用程序,如Facebook和谷歌弹出,但不应该显示在该列表中。这是它的代码:

String html = "<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>" + "<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>";

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"MY EMAIL ADDRESS"});
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(html));
startActivity(Intent.createChooser(intent, "Send email..."));

2)使用意图(Intent.ACTION_SENDTO)。这种方式过滤无用的应用程序,并向我展示邮件客户端。但它不会在Gmail客户端中以HTML格式显示我的电子邮件。当我发送电子邮件时,某些客户端以HTML格式显示主体,而其他客户端则不识别HTML,而我的链接的行为与纯文本类似。此代码如下所示:

String html ="<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>"+"<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>"; Intent send =newIntent(Intent.ACTION_SENDTO); String uriText ="mailto:MY EMAIL ADDRESS"+"?subject=subject here"+"&body="+ Html.fromHtml(html); uriText = uriText.replace(" ","%20"); Uri uri = Uri.parse(uriText); send.setData(uri);startActivity(Intent.createChooser(send,"Send mail..."));

3)使用JavaMail API发送邮件,这给应用程序增加了很多复杂性,到目前为止我还没有测试它。

你有什么建议?我需要一种方法来获得第一种和第二种方式的优点。我需要用户点击按钮时显示Gmail客户端,我可以在客户端的body显示他/她的HTML内容。

提问于
用户回答回答于

如果你只想要一个应用程序来处理你的意图,那么你需要删除Intent.createChooser(),而不是使用startActivity()它使用默认的电子邮件客户端发送邮件,如果没有设置,那么会要求这样做。

用户回答回答于

尝试以下方法

Intent shareIntent = new Intent(Intent.ACTION_SENDTO,Uri.parse("mailto:"));
shareIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(body));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
startActivity(shareIntent);

这只会显示电子邮件应用程序。

扫码关注云+社区

领取腾讯云代金券