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

Posted

技术标签:

【中文标题】单击按钮打开电子邮件客户端【英文标题】:Opening an email client on clicking a button 【发布时间】:2011-02-13 15:40:28 【问题描述】:

我正在设计一个应用程序,我需要在其中。应使用预定义的主题和“收件人”地址打开电子邮件客户端。有没有办法做到这一点?如果可能的话,请给我解决方案和代码示例......

【问题讨论】:

How to open Email program via Intents (but only an Email program)的可能重复 请查看this 仅获取电子邮件客户端的答案 【参考方案1】:

是这样的:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]  "some@email.address" );
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

或者,您可以使用IntentFactory.getSendEmailIntent(String mailTo, String mailCC, String subject, CharSequence body, File attachment)。

【讨论】:

当我点击按钮时,它显示没有应用程序可以执行此操作......解决方案是什么??? 这在今天不能可靠地工作 - 例如,它将允许用户选择 Facebook Messenger,而不是 GMail。请参阅:***.com/a/15022153/1735603(线程中接受的答案也是错误的,请注意) 这个解决方案在 2020 年 12 月对我不起作用。我来自官方文档的工作解决方案:***.com/a/62877003/2155858【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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 因为它不执行任何需要权限的操作。它只是打开可以发送电子邮件的活动。 如何对主题和正文进行编码,以防它们包含会破坏事物的字符? @mixel 经过一些测试,你需要做URLEncoder.encode().replace("+", "%20") 否则电子邮件将有加号而不是空格。【参考方案4】:

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

android:autoLink="email"

【讨论】:

这是最简单的解决方案【参考方案5】:

如果可以的话,最好使用常量,例如intent.type ClipDescription.MIMETYPE_TEXT_PLAIN

科特林:

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"))

【讨论】:

【参考方案6】:

好的 - 现在上述答案在 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);
    

【讨论】:

在 Android 10 上不适合我。EXTRA_SUBJECTEXTRA_TEXT 将被忽略

以上是关于单击按钮打开电子邮件客户端的主要内容,如果未能解决你的问题,请参考以下文章

PHP:从表单中获取电子邮件并在单击按钮时发送它

如何从电子邮件正文发送电子邮件?

Cordova - 通过单击按钮打开本机电子邮件应用程序

如何单击按钮并打开窗口以在c#中发送电子邮件

outlook2010的收到邮件后怎么弹出提示窗口

mailto实现将用户在网页中输入的内容传递到本地邮件客户端