首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个Android sendMessage HTML代码

一个Android sendMessage HTML代码
EN

Stack Overflow用户
提问于 2021-04-05 20:56:43
回答 1查看 107关注 0票数 2

我的应用程序编译并发送带有以下代码的HTML消息:

代码语言:javascript
复制
String s = ...; // html text with normal & bold face, proportional & monospaced fonts, etc.
Message msg = new Message(s);
msg.setMimeType(Message.MIME_HTML);
sendMessage(subject, msg, recipients);

在iOS (iPhone X)上,使用正确的html呈现文本打开邮件应用程序。

在Android (三星Tab A)上,这是行不通的:

  • Gmail应用程序:显示带有新行的纯文本(没有粗体字体等)
  • 电子邮件应用程序(三星):纯文本没有新行(dito)

(在带有电子邮件客户端的模拟器中,我看到了正确的html源文本。)

如何解决这一问题?

也许这与https://github.com/codenameone/CodenameOne/issues/3101有关。

编辑

使用以下HTML示例进行测试:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<body>
<h2>Example</h2>
Text with <b>bold</b> and <i>italics</i>.<br>
This text on a new line.
</body>
</html>

具有以下输出(读取发送邮件的屏幕截图):

顺便说一句,当发送纯文本而不是HTML时,新行不会出现在Gmail中,而在三星电子邮件中则会出现(参见问题3101)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 13:43:52

多年来,情况似乎发生了很大的变化。对于Html.fromHtmlBuild.VERSION.SDK_INT >= 24是不推荐的。它现在需要一个额外的标志参数Html.FROM_HTML_MODE_LEGACY。但是,旧版本仍然受到支持,而且确实如此。还有一个版本HtmlCompat.fromHtml,这是等价的。类Html支持HTML子集,例如支持<b><i><font>,但不支持<html><body>

接下来,建议的发送html消息的方式已经更改。不使用"text/html"类型、参数EXTRA_TEXT和方法fromHtml,我们应该使用"text/plain"类型,使用参数EXTRA_TEXT (参见下文)提供纯文本,使用参数EXTRA_HTML_TEXT提供原始HTML源文件。支持(完全) HTML的电子邮件客户端将使用EXTRA_HTML_TEXT,而不是返回到EXTRA_TEXT的电子邮件客户机。

然后,谷歌似乎在几年前就取消了对的HTML支持(为什么??)使用上述方法,Gmail返回到EXTRA_TEXT,而三星电子邮件支持EXTRA_HTML_TEXT,这提供了正确呈现的HTML!

在Gmail中,HTML输入是“净化”的,这似乎意味着只有纯文本出现,并为<h1><br>等提供适当的换行。不支持其他格式,如粗体、斜体或字体。Html.fromHtml方法对于为Gmail创建EXTRA_TEXT回退文本仍然很有用。

我为Android尝试了很多使用本机代码的方法,但是我无法让Gmail正确地呈现HTML。我在三星的电子邮件中找到了几种不同的方法,我会给出一个我认为应该怎么做的方法。

结论

下面的代码是解决https://github.com/codenameone/CodenameOne/issues/3101https://github.com/codenameone/CodenameOne/issues/3386问题的解决方案。

如果您想发送HTML格式的文本,这将工作在一些电子邮件客户端(如三星电子邮件),而不是在其他(特别是Gmail)。在后一种情况下,您只能发送一些断行格式的纯文本。

如果您希望发送一个包含纯文本的带有换行符的邮件,则生成一个只包含文本和<br>标记的字符串,并使用下面的代码将其作为HTML发送。这给出了三星电子邮件和Gmail的正确结果。

代码语言:javascript
复制
package com.xx.yy;

import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.text.Html;

import com.codename1.impl.android.AndroidNativeUtil;
import com.codename1.impl.android.IntentResultListener;
import com.codename1.io.Log;

public class AndroidNativeInterfaceImpl {

    // adapted from com.codename1.impl.android.AndroidImplementation.sendMessage()
    // pass HTML String, not Message; no attachments
    public void sendHTMLMessage(String recipient, String subject, String msg) {

        String[] recipients = new String[] { recipient };

        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_EMAIL, recipients);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);

        // deprecated
        //emailIntent.setType("text/html");
        //emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(msg));

        // new
        emailIntent.setType("text/plain");
        emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(msg, Html.FROM_HTML_MODE_LEGACY)); // fallback text for e.g. Gmail
        emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, msg); // raw (full) HTML for e.g. Samsung Email

        AndroidNativeUtil.startActivityForResult(Intent.createChooser(emailIntent, "Send mail..."), new IntentResultListener() {
            public void onActivityResult (int requestCode, int resultCode, Intent data) {
                Log.p("native sendHTMLMessage done");
            }
        });
    }

    public boolean isSupported() {
        return true;
    }
}

编辑:一些有用的链接

https://developer.android.com/reference/android/content/Intent.html#ACTION_SEND

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/text/Html.java

Android - Send email with styled HTML

Has Android's Gmail app removed the ability to send HTML emails via Intent?

Sending HTML based email body using android intent

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66959684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档