Android,如何发送 HTML 电子邮件并强制 Android 通过 G-Mail 而不是其他应用程序发送它?
Posted
技术标签:
【中文标题】Android,如何发送 HTML 电子邮件并强制 Android 通过 G-Mail 而不是其他应用程序发送它?【英文标题】:Android, How to send HTML email and force Android to send it through G-Mail not other applications? 【发布时间】:2012-07-11 22:39:37 【问题描述】:我想通过我的应用程序发送电子邮件。我需要通过 G-Mail 发送基于 html 的电子邮件。我发现以下解决方案各有利弊。
1) 使用 Intent (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 (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..."));
【问题讨论】:
Html.fromHtml(html)?不工作吗? 正如您在我上一个屏幕截图中看到的那样,它删除了所有 HTML 标记,但链接(第一行)显示为纯文本。请与第二张图片进行比较。谢谢。 @Hesam 我无法达到第一个。我尝试粘贴您的完整代码(第一个),链接显示为纯文本。有什么想法吗? @Hesam 你找到解决方案了吗?如果你有一个它是否支持 html 表格标签?如果您有解决方案,您可以发布解决方案。谢谢 【参考方案1】:要仅获取电子邮件应用程序,请使用 Intent.setType("message/rfc822")
【讨论】:
【参考方案2】:试试下面的 -
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);
这只会显示电子邮件应用程序。
【讨论】:
我发现这个解决方案不起作用,虽然它确实将应用程序过滤为仅电子邮件类型,但最终还是出现了与最初所述相同的问题,Gmail 无法将文本正确格式化为 html。跨度> 【参考方案3】:试试这个代码:它将只选择电子邮件提供商,而不是 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:"));
【讨论】:
谢谢亲爱的 Manikandan,我测试了你的代码。尽管它删除了很多无用的应用程序,但正如您所说,它仍然在列表中包含蓝牙、Drive、Skype 和 Wi-Fi Direct。感谢您的建议。【参考方案4】:如果您只希望一个应用程序来处理您的意图,那么您需要删除 Intent.createChooser(),而不是使用 startActivity()---> 它使用默认电子邮件客户端发送邮件,如果未设置则将要求这样做... tat 可以随时更改
【讨论】:
谢谢,我尝试了你的建议。虽然它打开了邮件客户端,但它没有我分配的数据,例如 to 和 body。两个都很干净。以上是关于Android,如何发送 HTML 电子邮件并强制 Android 通过 G-Mail 而不是其他应用程序发送它?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 中以 html 格式的电子邮件发送图像?
如何在 Android 中的图像上添加文本并使用 JavaMail API 通过电子邮件发送