【问题标题】:Intent.EXTRA_EMAIL not populating the To fieldIntent.EXTRA_EMAIL 未填充“收件人”字段
【发布时间】:2012-02-01 14:04:48
【问题描述】:

我正在尝试使用 从我的应用程序发送电子邮件,但电子邮件的“收件人”字段不会填充。如果我添加代码来填写主题或文本,它们就可以正常工作。只有收件人字段不会填充。

我也尝试将类型更改为“text/plain”和“text/html”,但我遇到了同样的问题。有人可以帮忙吗?

public void Email(){

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    String recipient = getString(R.string.IntegralEmailAddress);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL  , recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); }

我尝试使用的电子邮件客户端是 Gmail

【问题讨论】:

    标签: intent android android-intent


    【解决方案1】:

    我认为您没有将recipient 传递为array of string

    应该是这样的

    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "someone@gmail.com" });
    

    【讨论】:

    • 安卓……你怎么这么可怜?
    • 哈哈哈,你让我笑了 +100 万 @BugsHappen .. 原因:它是开源的,但文档不是 100% 令人满意,设备制造商根据他们的需要进行修改(大多数设备都很便宜而且没用),开发人员不阅读“developer.android.com”。
    • 还要确保你 NOTintent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) 它不会工作,因为 list.toArray() 产生 Object[] 而不是 String[]
    • @kape123 这确实有效但是intent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
    【解决方案2】:

    使用这个

    public void Email(){
        // use this to declare your 'recipient' string and get your email recipient from your string xml file
        Resources res = getResources();
        String recipient = getString(R.string.IntegralEmailAddress);
        Intent emailIntent = new Intent(Intent.ACTION_SEND); 
        emailIntent.setType("message/rfc822");  //set the email recipient
        emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
        //let the user choose what email client to use
        startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 
    
    ``}
    

    这会起作用:)
    这是关于 Intent.Extra_Email
    的 android 文档所说的 - 所有“收件人”电子邮件地址的字符串数组。
    所以你应该正确地喂字符串 你可以在这里阅读更多内容
    http://developer.android.com/guide/components/intents-common.html#Email 在这里http://developer.android.com/guide/topics/resources/string-resource.html 或使用 ACTION_SENDTO 操作并包含“mailto:”数据方案。例如:

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
    

    【讨论】:

      【解决方案3】:

      在 Kotlin 中 - Android

      fun sendMail(
              activity: Activity,
              emailIds: Array<String>,
              subject: String,
              textMessage: String
          ) {
      
      
              val emailIntent = Intent(Intent.ACTION_SEND)
              emailIntent.type = "text/plain"
              emailIntent.putExtra(Intent.EXTRA_EMAIL, emailIds)
              emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
              emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage)
              emailIntent.setType("message/rfc822")
              try {
                  activity.startActivity(
                      Intent.createChooser(
                          emailIntent,
                          "Send email using..."
                      )
                  )
              } catch (ex: ActivityNotFoundException) {
                  Toast.makeText(
                      activity,
                      "No email clients installed.",
                      Toast.LENGTH_SHORT
                  ).show()
              }
          }
      

      您也可以使用 [ val emailIntent = Intent(Intent.ACTION_SENDTO) ] 调用直接电子邮件 客户

      //argument of function
      val subject = "subject of you email"
      val eMailMessageTxt = "Add Message here"
      
      val eMailId1 = "emailId1@gmail.com"
      val eMailId2 = "emailId2@gmail.com"
      val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)
      
      //Calling function
      sendMail(this, eMailIds, subject, eMailMessageTxt)
      

      希望这段代码 sn-p 对 kotlin 开发者有所帮助。

      【讨论】:

        【解决方案4】:
        private void callSendMeMail() {
            Intent Email = new Intent(Intent.ACTION_SEND);
            Email.setType("text/email");
            Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "me@gmail.com" });
            Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
            startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
        }
        

        【讨论】:

        • 表示没有应用程序可以执行此操作。
        【解决方案5】:

        几件事:

        1 - 您需要将操作常量变量设置为 ACTION_SENDTO。
        Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

        2 - 如果您希望仅通过邮件打开它,请使用 setData() 方法:intentEmail.setData(Uri.parse("mailto:")); 否则它将要求您通过设备上的其他应用程序将其作为文本、图像、音频文件打开。

        3 - 您需要将电子邮件 ID 字符串作为 一个数组对象 而不仅仅是一个字符串。字符串为:"name@email.com"。字符串的数组对象为:new String[] {"email1", "email2", "more_email"}

        intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
        

        【讨论】:

          【解决方案6】:

          这对我有用:

          val email = "recipient@email.com"
          val intent = Intent(Intent.ACTION_SENDTO)
          intent.data = Uri.parse("mailto:$email")
          intent.putExtra(Intent.EXTRA_SUBJECT,"My Subject")
          startActivity(intent)
          

          【讨论】:

            【解决方案7】:

            让我浪费了这么多时间!感谢接受的答案! 我将添加一些 Kotlin 代码和几个方便的扩展函数

            fun Activity.hasEmailClient(): Boolean =
                emailIntent("someAddress", "someSubject", "someText")
                    .resolveActivity(packageManager) != null
            
            fun Activity.openEmailClient(address: String, subject: String, text: String) {
                startActivity(emailIntent(address, subject, text))
            }
            
            private fun emailIntent(address: String, subject: String, text: String): Intent =
                Intent(Intent.ACTION_SENDTO).apply {
                    type = "text/plain"
                    data = Uri.parse("mailto:")
                    putExtra(Intent.EXTRA_EMAIL, arrayOf(address))
                    putExtra(Intent.EXTRA_SUBJECT, subject)
                    putExtra(Intent.EXTRA_TEXT, text)
                }
            

            如果适合您的需要,请随意将 Activity 替换为 Fragment。示例用法:

            if (hasEmailClient()) {
                openEmailClient(
                    "example@email.info",
                    "this is the subject",
                    "this is the text"
                )
            }
            

            【讨论】:

              【解决方案8】:

              首先您应该将Intent.EXTRA_EMAIL 的值设置为字符串类型,如下所示:

              emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@gmail.com" });
              

              如果这不起作用,则只需卸载应用程序并再次运行......

              【讨论】:

                猜你喜欢
                • 2014-05-31
                • 1970-01-01
                • 2021-05-06
                • 2022-11-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-01-22
                • 2016-07-23
                相关资源
                最近更新 更多