代码之家  ›  专栏  ›  技术社区  ›  Denis Palnitsky

如何发送HTML电子邮件

  •  35
  • Denis Palnitsky  · 技术社区  · 14 年前

    我找到了一种发送纯文本电子邮件的方法,目的是:

    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格式的文本。
    尝试设置类型(“text/html”)不起作用。

    6 回复  |  直到 6 年前
        1
  •  47
  •   antnerves    14 年前

    你可以通过 Spanned 额外的文字。为了确保意图只解决处理电子邮件的活动(如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())
    );
    
        2
  •  3
  •   Andy Weinstein    13 年前

    这对我的HTML非常有帮助,但是动作“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..."));
    
        3
  •  2
  •   Chris Shaffer    14 年前

    我还没有开始Android开发,但是 documentation 因为意图是说如果使用额外的文本,那么mime类型应该是text/plain。似乎如果你想看到HTML,你必须使用额外的\流来代替…

        4
  •  1
  •   SMGhost    6 年前

    有一段时间,我一直试图通过Gmail应用程序发送HTML,所以决定对我的发现留下一些见解,以防其他人也遇到类似的问题。

    似乎不管我做了什么,我都无法让HTML中包含粗体文本。 然后我尝试切换到Outlook客户机,让我惊讶的是,它工作得很好。 HTML标记也在其他较旧的设备上工作,但在我的设备上不工作(Galaxy S7 API 26),所以我认为,Gmail应用程序似乎已经放弃了对来自意图的HTML语法的支持,或者现在您可能需要以某种非常具体的方式提供它,而这种方式并没有明确的文档记录。

    我最新的Gmail版本是6.9.25…在Nexus 5x API 25 Emulator(Nougat)上 从7.5.21版开始它就停止工作了…在Nexus 5x API 26 Emulator(oreo)上

        5
  •  0
  •   Rodrigo Bermejo    7 年前

    您必须将“额外\u文本”更改为“额外\u HTML \u文本”

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

        6
  •  -3
  •   EpicDewd    14 年前

    只是在文本区域添加一些HTML怎么样?

    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "<strong>Test</strong>");