【问题标题】:Email body doesn't show when using an Intent使用 Intent 时不显示电子邮件正文
【发布时间】:2013-05-11 18:43:53
【问题描述】:

当我尝试发送电子邮件 Intent 时,无论我使用的是 INTENT.ACTION_SEND 还是 ACTION.SENDTO 并使用库存的 Sony Xperia Active 电子邮件客户端,主题和收件人都可以正常显示,但正文是空的,除了标准客户粘贴的评论。在我的三星 Galaxy Note 2 上,同样的代码就像魅力一样。

    if(mPrefs.getBoolean("alternative_email_client", false)){
        Intent send = new Intent(Intent.ACTION_SENDTO);
        String uriText = "mailto:" + Uri.encode(emailStrings[6]) + 
               "?subject=" + Uri.encode("The subject") + 
               "&body=" + Uri.encode(emailBody);
        Uri uri = Uri.parse(uriText);
        send.setData(uri);
        startActivity(Intent.createChooser(send, "Email verschicken"));
    } else {
        Intent send = new Intent(Intent.ACTION_SEND);
        send.putExtra(Intent.EXTRA_EMAIL, emailStrings[6]);
        send.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
        send.putExtra(Intent.EXTRA_TEXT, emailBody);
        startActivity(Intent.createChooser(send, "Email verschicken"));
    }

【问题讨论】:

    标签: android email android-intent


    【解决方案1】:

    要发送带有正文的电子邮件,请使用 message/rfc822。

    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("message/rfc822");
    sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "to1@example.com", "to2@example.com" });
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject of the email");
    sendIntent.putExtra(Intent.EXTRA_TEXT, "Content of the email");
    startActivity(sendIntent);
    

    希望这会有所帮助。

    【讨论】:

    • 好的,这对身体有帮助,但是使用它我遇到了一个新问题:收件人已经不见了。如何解决这个问题?
    • 很奇怪。我用 Gmail 试过这个,我确实看到了收件人。您要从哪个应用程序发送电子邮件?
    • 这也适用于我:我忘记为 EXTRA_EMAIL 使用字符串数组。它不适用于单个字符串。
    • 适合现在观看此内容的人。对于API >= 15,这可能不起作用。所以试试:stackoverflow.com/questions/4883199/…
    【解决方案2】:

    我对 gmail 使用正文属性,对其他电子邮件使用 EXTRA_TEXT。我已经测试了不同的电子邮件应用程序,例如三星电子邮件、oneplus 电子邮件和 LG 电子邮件,它们似乎支持 EXTRA_TEXT 但 gmail 支持“正文”属性。

     fun composeEmailMessage(context: Context,  subject: String, body: String, emails: Array<String> = arrayOf()) {
    val intent = Intent(Intent.ACTION_SENDTO)
    intent.data = Uri.parse("mailto:")
    intent.putExtra(Intent.EXTRA_EMAIL, emails)
    intent.putExtra(Intent.EXTRA_SUBJECT, subject)
    intent.putExtra(Intent.EXTRA_TEXT, body)//other emails app
    intent.putExtra("body", body)//gmail
    if (intent.resolveActivity(context.packageManager) != null) {
        context.startActivity(Intent.createChooser(intent, "Send email via..."))
    }
    

    }

    【讨论】:

      【解决方案3】:

      尝试添加消息类型

      ...
      emailIntent.setType("plain/text");
      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, myMessage);
      ...
      

      【讨论】:

      • 好吧,我真的以为我会拥有它。但即使我添加该行,正文也不会显示在股票电子邮件应用程序中。
      【解决方案4】:

      首先创建一个选择器。重要的是,在“mailto:”之后将其留空。

      val selectorIntent = Intent(Intent.ACTION_SENDTO).apply {
          data = Uri.parse("mailto:")
      }
      

      然后是电子邮件意图本身:

      val emailIntent = Intent(Intent.ACTION_SEND).apply {
          putExtra(Intent.EXTRA_EMAIL, arrayOf("email@email.com"))
          putExtra(Intent.EXTRA_SUBJECT, "This is a subject")
          putExtra(Intent.EXTRA_TEXT, "Body text")
      
          selector = selectorIntent
      }
      

      然后打开电子邮件应用:

      if (intent.resolveActivity(packageManager) != null) {
          startActivity(intent)
      }
      

      (解决方案在kotlin中)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-10
        • 2022-11-18
        • 1970-01-01
        • 2011-09-09
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多