Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

startActivity(Intent.createChooser(intent, "Send Email"));

上面的代码打开一个对话框,该对话框显示下列应用程序:-Bluetooth Google Docs、 雅虎邮件,Gmail、 Orkut、 Skype 等。

实际上,我要筛选这些列表选项。我想要显示只有电子邮件相关的应用程序如 Gmail,Yahoo Mail。如何去做?

我见过此类的示例,Android 市场 ' 应用程序上。

  1. 开放的 Android 市场的应用程序
  2. 打开任何应用程序开发人员指定他/她的电子邮件地址。(如果您找不到此类应用程序只需打开我的应用程序:-market://details?id=com.becomputer06.vehicle.diary.free,由车辆日记或搜索)
  3. 向下滚动到开发
  4. 单击发送电子邮件

该对话框显示只有电子邮件应用程序如 Gmail,Yahoo Mail 等。它不显示 Bluetooth,Orkut 等。什么样的代码生成此类对话框?

请提供答案,因此我可以提高我接受率。;)

2012-01-02 13:50:09
问题评论:

对不起,这是不可能与 Intent.ACTION_SEND。也许它适用于直接向 gmail App 的意图,但我不知道这是否可能。

万一有人恰好在此处了解的关于电子邮件的方法,EXTRA_MAIL 应对应于String[],不只是一个String,如下所示。

可能的重复项的发送通过 gmail 的电子邮件

回答:

当您将像下面您将得到更改您 intent.setType

intent.setType("text/plain");

使用android.content.Intent.ACTION_SENDTO (新 Intent(Intent.ACTION_SENDTO);) 来获取电子邮件客户端,与没有 facebook 或其他应用程序列表。不仅仅是电子邮件客户端。

我不建议直接进入电子邮件应用程序。让用户选择自己最喜爱的电子邮件应用程序不限制他。

如果您使用 ACTION_SENDTO,putExtra 不工作意图向添加主题和文本。使用 Uri 添加主题和正文文本。

编辑︰我们可以用作message/rfc822而不是"text/plain"的 MIME 类型。但是,它不表示"只提供电子邮件客户端"--它表示"提供任何支持消息/rfc822 数据"。随时可能包含某些应用程序不是电子邮件客户端。

message/rfc822支持 MIME 类型的.mhtml, .mht, .mime

您可以请提供一些代码来生成所需的输出?

@becomputer06 引用这︰ stackoverflow.com/questions/8284706/send-email-via-gmail

在使用ACTION_SENDTO时,意向选择器说no apps installed to perform this intent我使用 Android 4.1.2 和办安装的电子邮件应用程序...

正确的方法是从 Magnus 的答案。我建议原始海报来更改已接受的答案。

使用 MIME 类型以执行发送操作是坏事,因为基本上指示 Android 提供的支持类型message/rfc822文件发送的应用程序列表。一样发送一封电子邮件。使用mailto:协议,因为这是电子邮件客户端的实际了解。

4.1.2 处理不能接受的答案。这应该适用于所有平台︰

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

希望这能帮助。

更新︰ 根据marcwjj,似乎在 4.3,我们需要传递字符串数组,而不是要使其工作电子邮件地址的字符串。我们可能需要添加一行︰

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

引用链接

您是正确的并不是在 4.2。所以这是真正唯一正确答案,谢谢 !

这是完美的。下面提到的指定"收件人"部分是什么,可通过电子邮件发送客户端的可用选项的人。使用 Uri.fromParts ("收件人","",而是 null) 会将光标放在收件人字段的适合我的需要。

请尝试此 emailIntent.putExtra (Intent.EXTRA_TEXT,"我是电子邮件正文"。);

如果没有特定的收件人,这也适用︰ Uri.fromParts("mailto", "", null)

这对无效我 Android 4.3 任何更多。请检查出官方的 Android doc 上可正常运行的意图以发送电子邮件︰ developer.android.com/guide/components/...

有三种主要方法︰

String address = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1.自定义Uri:

Uri uri = Uri.parse("mailto:" + email)
    .buildUpon()
    .appendQueryParameter("subject", subject)
    .appendQueryParameter("body", body)
    .build();

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));

2.使用Intent显示额外内容︰

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3.支持库ShareCompat:

Activity activity = /* Your activity here */

ShareCompat.IntentBuilder.from(activity)
    .setType("message/rfc822")
    .addEmailTo(email)
    .setSubject(subject)
    .setText(body)
    //.setHtmlText(body) //If you are using HTML in your body text
    .setChooserTitle(chooserTitle)
    .startChooser();

这我的蹦到直一些 (例如 Skype) 作为可能处理的其他选项的效果好得多。

如果缓冲区中有一个%符号,生成的电子邮件中的某些字符不会正确地编码。您需要执行建议的 @minipif Uri.encode舞蹈。

最佳答案在这里,这是浪费时间在其他人,第二个这里是什么 i 选择,并可正常运行,只显示纯电子邮件应用程序不 gDrive、 没有蓝牙。.等。谢谢 @becomputer06

要小心"&"字符。如果有 & 字符在电子邮件正文中,这些方法将切断后的正文 &。例如,如果您发送类似的主体"我 & 样本体"也会只是"我"

SENDTO(以及如果这一点很重要,则使用URI.encode ) 我的电话不会显示任何应用程序,用于处理目的。SEND它确实显示 Gmail 和更多的替代方案。

Android 的官方文档中引用的这,测试其 Android 4.4,和工作完美。https://developer.android.com/guide/components/intents-common.html#Email的更多示例,请参阅

public void composeEmail(String[] addresses, String subject) {
    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 的文档中的相对较新更改。

很好 !可靠的一个,它引用 Bible' 的 Android 应用程序开发人员。

冒号后邮寄地址未欺骗我 !而不使用"mailto""mailto:"

是的。为我 5.0.2 版正常工作版本还

5.1.1 的工作。其他选项不适合我。

请尝试︰

intent.setType("message/rfc822");

他是对的我已尝试使用它并提供 [驱动器,电子邮件,Gmail,Skype],这应该是"正确答案"

使用 MIME 类型以执行发送操作是坏事,因为基本上指示 Android 提供的支持类型message/rfc822文件发送的应用程序列表。一样发送一封电子邮件。使用mailto:协议,因为这是电子邮件客户端的实际了解。

内容来源于Stack Overflow Send Email Intent
请输入您的翻译

Send Email Intent

确认取消