发送电子邮件意向

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

上面的代码打开一个对话框,显示以下应用程序: – 蓝牙,Google文档,雅虎邮箱,Gmail,Orkut,Skype等。

其实,我想过滤这些列表选项。 我只想显示电子邮件相关的应用程序,例如Gmail,雅虎邮件。 怎么做?

我在“Android电子市场”应用程序中看到过这样的例子。

  1. 打开Android电子市场应用
  2. 打开开发人员指定其电子邮件地址的任何应用程序。 (如果你不能find这样的应用程序只是打开我的应用程序: – 市场:/ /细节?编号= com.becomputer06.vehicle.diary.free,或search“车辆日记”)
  3. 向下滚动到“DEVELOPER”
  4. 点击“发送电子邮件”

该对话框只显示电子邮件应用程序,例如Gmail,雅虎邮件等。它不显示蓝牙,Orkut等。什么代码产生这样的对话?

请提供答案,以便提高我的“接受率”。 ;)

当你将改变你的intent.setType如下所示,你会得到

 intent.setType("text/plain"); 

使用android.content.Intent.ACTION_SENDTO获取电子邮件客户端列表,没有Facebook或其他应用程序。 只是电子邮件客户端。 例如:

 new Intent(Intent.ACTION_SENDTO); 

我不会build议你直接到电子邮件应用程序。 让用户select他喜欢的电子邮件应用程序。 不要限制他。

如果您使用ACTION_SENDTO,则putExtra无法将主题和文本添加到意图。 使用Uri添加主题和正文文本。

编辑:我们可以使用message/rfc822而不是"text/plain"作为MIMEtypes。 但是,这并不表示“只提供电子邮件客户端” – 它表示“提供任何支持message / rfc822数据的东西”。 这可能很容易包含一些非电子邮件客户端的应用程序。

message/rfc822支持.mhtml, .mht, .mime MIMEtypes

接受的答案在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,我们需要传递string数组,而不是一个string的电子邮件地址,使其工作。 我们可能需要添加一行:

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

引用链接

主要有三种方法:

 String email = /* 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(); 

这是从Android官方文档中引用的,我已经在Android 4.4上进行了testing,并且完美地工作。 通过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); } } 

答案很晚,尽pipe我想出了一个可以帮助别人的解决scheme

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO); emailIntent.setData(Uri.parse("mailto: abc@xyz.com")); startActivity(Intent.createChooser(emailIntent, "Send feedback")); 

这是我的输出 (Gmail +收件箱,没有别的)

在这里输入图像描述

我从Google Developers网站获得了这个解决scheme

尝试:

 intent.setType("message/rfc822"); 

这适用于我:

 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); intent.putExtra(Intent.EXTRA_EMAIL , new String[] { "me@somewhere.com" }); intent.putExtra(Intent.EXTRA_SUBJECT, "My subject"); startActivity(Intent.createChooser(intent, "Email via...")); 

即使用ACTION_SENDTO操作而不是ACTION_SEND操作。 我已经尝试了几个Android 4.4设备,它限制了select器popup窗口只显示电子邮件应用程序(电子邮件,Gmail,雅虎邮件等),它正确地插入电子邮件地址和主题到电子邮件。

如果你只想要电子邮件客户端,你应该使用android.content.Intent.EXTRA_EMAIL和一个数组。 这里举一个例子:

 final Intent result = new Intent(android.content.Intent.ACTION_SEND); result.setType("plain/text"); result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient }); result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); result.putExtra(android.content.Intent.EXTRA_TEXT, body); 

下面的代码对我很好。

 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"}); Intent mailer = Intent.createChooser(intent, null); startActivity(mailer); 

编辑:不再与新版本的Gmail工作

这是我在当时发现的任何angular色的唯一方式。

doreamon的回答是现在正确的方式,因为它可以处理新版本的Gmail中的所有angular色。

老答案:


这是我的。 它似乎适用于所有Android版本,支持主题和消息正文,支持完整的utf-8字符:

 public static void email(Context context, String to, String subject, String body) { StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to)); if (subject != null) { builder.append("?subject=" + Uri.encode(Uri.encode(subject))); if (body != null) { builder.append("&body=" + Uri.encode(Uri.encode(body))); } } String uri = builder.toString(); Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri)); context.startActivity(intent); } 

这些解决scheme都没有为我工作。 这是一个适用于棒棒糖的最小解决scheme。 在我的设备上,只有Gmail和本机电子邮件应用才会出现在生成的select器列表中。

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + Uri.encode(address))); emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); emailIntent.putExtra(Intent.EXTRA_TEXT, body); startActivity(Intent.createChooser(emailIntent, "Send email via...")); 

以下代码为我工作!

 import android.support.v4.app.ShareCompat; . . . . final Intent intent = ShareCompat.IntentBuilder .from(activity) .setType("application/txt") .setSubject(subject) .setText("Hii") .setChooserTitle("Select One") .createChooserIntent() .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); activity.startActivity(intent); 

适用于所有android版本:

 String[] TO = {"email@server.com"}; Uri uri = Uri.parse("mailto:email@server.com") .buildUpon() .appendQueryParameter("subject", "subject") .appendQueryParameter("body", "body") .build(); Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri); emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

这对我来说很好:

  Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("mailto:" + address)); startActivity(Intent.createChooser(intent, "E-mail")); 

如果您想确保您的意图仅由电子邮件应用程序(而不是其他文本消息或社交应用程序)处理,则使用ACTION_SENDTO操作并包含“mailto:”数据scheme。 例如:

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

我在https://developer.android.com/guide/components/intents-common.html#Emailfind了这个;

最后想出最好的办法

  String to = "test@gmail.com"; String subject= "Hi I am subject"; String body="Hi I am test body"; String mailTo = "mailto:" + to + "?&subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body); Intent emailIntent = new Intent(Intent.ACTION_VIEW); emailIntent.setData(Uri.parse(mailTo)); startActivity(emailIntent); 

也许你应该试试这个: intent.setType("plain/text");

我在这里find了 我已经在我的应用程序中使用它,它只显示电子邮件和Gmail选项。

用这个:

 boolean success = EmailIntentBuilder.from(activity) .to("support@example.org") .cc("developer@example.org") .subject("Error report") .body(buildErrorReport()) .start(); 

使用build gradle:

 compile 'de.cketti.mailto:email-intent-builder:1.0.0' 

这是我使用的,它适用于我:

 //variables String subject = "Whatever subject you want"; String body = "Whatever text you want to put in the body"; String intentType = "text/html"; String mailToParse = "mailto:"; //start Intent Intent variableName = new Intent(Intent.ACTION_SENDTO); variableName.setType(intentType); variableName.setData(Uri.parse(mailToParse)); variableName.putExtra(Intent.EXTRA_SUBJECT, subject); variableName.putExtra(Intent.EXTRA_TEXT, body); startActivity(variableName); 

这也将让用户select他们喜欢的电子邮件应用程序。 这是不允许你做的唯一的事情是设置收件人的电子邮件地址。

这是根据Android开发人员文档将这些代码行添加到您的应用程序的方式:

 Intent intent = new Intent(Intent.ACTION_SEND);//common intent intent.setData(Uri.parse("mailto:")); // only email apps should handle this 

如果你想添加正文和主题,添加这个

  intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); intent.putExtra(Intent.EXTRA_TEXT, "Body" ); 

在电子邮件客户端中撰写电子邮件:

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

此代码正在我的设备中工作

 Intent mIntent = new Intent(Intent.ACTION_SENDTO); mIntent.setData(Uri.parse("mailto:")); mIntent.putExtra(Intent.EXTRA_EMAIL , new String[] {"mahendrarajdhami@gmail.com"}); mIntent.putExtra(Intent.EXTRA_SUBJECT, ""); startActivity(Intent.createChooser(mIntent, "Send Email Using..."));