单击按钮打开电子邮件客户端

65

我正在设计一个应用程序,在其中需要点击按钮来打开电子邮件客户端。电子邮件客户端应该以预定义的主题和“收件人”地址打开。是否有方法可以实现这一点?如果可能,请提供解决方案和代码示例...


请查看此答案以仅获取电子邮件客户端。 - Ayyappa
6个回答

93

1
当我点击按钮时,它显示“没有应用程序可以执行此操作”...有什么解决办法吗? - Rahul Kalidindi
5
今天这种方法无法可靠地工作,它会让用户选择Facebook Messenger而不是GMail。请参见:https://dev59.com/UGoy5IYBdhLWcg3wN7YX#15022153(该线程中被接受的回答也是错误的,请注意)。 - Firzen
这个解决方案在2020年12月对我无效。我的有效解决方案来自官方文档: https://dev59.com/yXE85IYBdhLWcg3whT5r#62877003 - Rajeev Jayaswal

49

要仅显示电子邮件客户端,请使用此代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("mailto:recipient@example.com?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body));
intent.setData(data);
startActivity(intent);
如果您已经选择了默认的电子邮件客户端,它会启动该客户端。否则,它将显示可用电子邮件客户端列表。

如果您已经选择了默认的电子邮件客户端,它会启动该客户端。否则,它将显示可用电子邮件客户端列表。


这个很完美地运行了...我惊奇为什么它在没有权限的情况下也能工作? - anshulkatta
@anshulkatta 因为它不执行需要权限的任何操作。它只是打开一个可以发送电子邮件的活动。 - mixel
如果主题和正文包含可能会破坏内容的字符,您该如何对它们进行编码? - Tyler
经过一些测试,您需要执行 URLEncoder.encode().replace("+", "%20"),否则电子邮件中将会有加号而不是空格。 - Tyler
这个运行良好。 - Salman Hameed

7
如果你在屏幕上有一个电子邮件地址,你可以像这样在你的xml中使用它:

如果您的屏幕上有电子邮件地址,则可以直接在您的xml中使用,如下所示:

android:autoLink="email"

5

好的,现在2020年之后我发现上述答案已经不再适用于我了。我在谷歌官方开发者网站上找到了一些内容,这对我有用。

 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);
    }

在安卓10上对我不起作用。EXTRA_SUBJECTEXTRA_TEXT被忽略了。 - Mark
对于 Android 10 及更高版本,我们需要在清单文件中添加查询以使 resolveActivity 正常工作,如答案 https://dev59.com/-FIG5IYBdhLWcg3w3Fk_#65166064 中所述。 - remain4life

1

如果有常量可用,最好使用常量,例如对于意图类型ClipDescription.MIMETYPE_TEXT_PLAIN

Kotlin:

val intent = Intent(Intent.ACTION_SEND)
intent.type = ClipDescription.MIMETYPE_TEXT_PLAIN
intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("emailId 1", "emailId 2"))
intent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Subject for email")
intent.putExtra(android.content.Intent.EXTRA_TEXT, "Description for email")
startActivity(Intent.createChooser(intent,"Send Email"))

0

您可以通过在模拟器上配置您的电子邮件地址与内置电子邮件一起打开电子邮件客户端。然后,当调用意图时,将会打开并发送邮件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接