发送电子邮件意向
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电子市场”应用程序中看到过这样的例子。
- 打开Android电子市场应用
- 打开开发人员指定其电子邮件地址的任何应用程序。 (如果你不能find这样的应用程序只是打开我的应用程序: – 市场:/ /细节?编号= com.becomputer06.vehicle.diary.free,或search“车辆日记”)
- 向下滚动到“DEVELOPER”
- 点击“发送电子邮件”
该对话框只显示电子邮件应用程序,例如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..."));