17

我想通过我的应用程序发送电子邮件。我需要通过 G-Mail 发送基于 HTML 的电子邮件。我发现以下解决方案各有利弊。

1)使用意图(Intent.ACTION_SEND)。这是一种非常简单的方法,我可以看到我的 HTML 格式的正文,但问题是当我点击“发送电子邮件”按钮时,会弹出很多应用程序,如 Facebook 和 Google+,这些都是无用的,我不应该在该列表中显示它. 这是它的代码:

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 = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:MY EMAIL ADDRESS" + "?subject=subject here" + "&body=" + html;
uriText = uriText.replace(" ", "%20");
Uri uri = Uri.parse(uriText);
send.setData(uri);
startActivity(Intent.createChooser(send, "Send mail..."));

在此处输入图像描述 在此处输入图像描述

3) 使用JavaMail API发送邮件,这增加了应用程序的复杂性,到目前为止我还没有对其进行测试。

你的建议是什么?我需要一种方法来获得第一种和第二种方法的优势。当用户单击按钮时,我需要它显示 Gmail 客户端,我可以在客户端的正文部分显示他/她的 html 内容。

任何建议将不胜感激。谢谢

=======================

更新

关于代码 2 的某些内容是错误的。代码是这样的:

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 = new Intent(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..."));

在此处输入图像描述

4

4 回答 4

5

尝试以下 -

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

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

于 2012-10-24T16:30:48.760 回答
2

如果您只希望一个应用程序来处理您的意图,那么您需要删除 Intent.createChooser(),而不是使用 startActivity()---> 它使用默认电子邮件客户端发送邮件,如果未设置则将要求这样做。 .. 可以随时更改

于 2012-07-12T08:52:47.397 回答
2

要仅获取电子邮件应用程序,请使用 Intent.setType("message/rfc822")

于 2014-05-09T09:47:48.847 回答
2

试试这个代码:它将只选择电子邮件提供商,而不是 Facebook 等。

 String body="<!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>";
            final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
            emailIntent.setType("text/html");           
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);    
            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(body));
            startActivity(Intent.createChooser(emailIntent, "Email:"));
于 2012-07-12T09:23:09.240 回答