【问题标题】:ACTION_SENDTO for sending an emailACTION_SENDTO 用于发送电子邮件
【发布时间】:2011-03-09 03:42:22
【问题描述】:

我在 Android 2.1 中执行以下代码 sn-p 时遇到“当前不支持此操作”错误情况。 sn-p 有什么问题?

public void onClick(View v) {
  Intent intent = new Intent(Intent.ACTION_SENDTO);
  Uri uri = Uri.parse("mailto:myemail@gmail.com");
  intent.setData(uri);
  intent.putExtra("subject", "my subject");
  intent.putExtra("body", "my message");
  startActivity(intent);
}

【问题讨论】:

    标签: android email android-intent


    【解决方案1】:

    如果您使用ACTION_SENDTOputExtra() 无法向意图添加主题和文本。使用setData()Uri 工具添加主题和文本。

    这个例子对我有用:

    // ACTION_SENDTO filters for email apps (discard bluetooth and others)
    String uriText =
        "mailto:youremail@gmail.com" + 
        "?subject=" + Uri.encode("some subject text here") + 
        "&body=" + Uri.encode("some text here");
    
    Uri uri = Uri.parse(uriText);
    
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
    sendIntent.setData(uri);
    startActivity(Intent.createChooser(sendIntent, "Send email")); 
    

    【讨论】:

    • 你真的应该使用URLEncoder吗?这不会使' '(空格)变成'+'而不是"%20"吗?
    • 这是我最喜欢的...但是我刚刚遇到一个电子邮件客户端用一个空格字符替换所有加号的情况,所以我现在要离开这条路。我会假设邮件应用程序经常解码一次或这样......坦率地说,我不想知道......这很烦人。
    • ...所以,无论如何,如果您通过 URI 传递正文,E-Mail V3.0 将把所有的 + 符号变成空格;我不敢相信。
    • Uri.parse(...) 似乎为您进行了编码,所以实际上不需要URLEncoder (或者这就是我发现的)。它也适用于 +。
    【解决方案2】:

    实际上,我找到了 EXTRA 的工作方式。 这是我在这里找到的关于 ACTION_SENDTO 的答案的组合

    http://www.coderanch.com/t/520651/Android/Mobile/no-application-perform-action-when

    以及我在这里找到的 HTML 内容:

    How to send HTML email (但如何在此 HTML 帖子中使用 ACTION_SENDTO 的变体对我不起作用 - 我得到了您所看到的“不支持的操作”)

        // works with blank mailId - user will have to fill in To: field
        String mailId="";
        // or can work with pre-filled-in To: field
    // 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..."));
    

    【讨论】:

    • 我已经看到了那个解决方案,但它并不是真正构建符合标准的 HTML 邮件;更多的是,许多邮件客户端会尝试变得更加智能并显示它——毕竟,每天发送的非标准符合性电子邮件如此之多,以至于您无法计算它们。此外,ACTION_SENDTOEXTRA_TEXT 的组合并非所有邮件客户端都支持,例如4.2 之前的 K-9 会忽略附加内容。
    • 太好了,谢谢。事实证明,这就是为我发送 HTML 的原因:emailIntent.setType("text/html"); 删除了它,它工作正常。
    【解决方案3】:

    你可以试试这个

     Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
                "mailto", emailID, null));
        emailIntent.putExtra(Intent.EXTRA_SUBJECT,
                Subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT,
                Text);
        startActivity(Intent.createChooser(emailIntent, Choosertitle);
    

    对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 2011-03-03
      • 2011-09-16
      • 2018-01-20
      • 1970-01-01
      • 2016-04-17
      相关资源
      最近更新 更多