Android 通过gmail发送电子邮件
我有一个发送电子邮件的代码Android 通过gmail发送电子邮件,android,email,android-intent,gmail,Android,Email,Android Intent,Gmail,我有一个发送电子邮件的代码 Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_EMAIL, new String[] { to }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_TEXT, msg); try { startActiv
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_EMAIL,
new String[] { to });
i.putExtra(Intent.EXTRA_SUBJECT, subject);
i.putExtra(Intent.EXTRA_TEXT, msg);
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Start.this,
"There are no email clients installed.",
Toast.LENGTH_SHORT).show();
}
但是当这个意图被激发的时候,我在列表中看到很多项目,比如短信应用程序、gmail应用程序、facebook应用程序等等
如何过滤此内容并仅启用gmail应用程序(或者可能仅启用电子邮件应用程序)?使用
android.content.Intent.ACTION\u SENDTO
(新建Intent(Intent.ACTION\u SENDTO);
)仅获取电子邮件客户端列表,而不使用facebook或其他应用程序。只有电子邮件客户端
我不建议您直接使用电子邮件应用程序。让用户选择他最喜欢的电子邮件应用程序不要约束他。
如果使用ACTION_SENDTO,putExtra无法将主题和文本添加到意图中。使用Uri添加主题和正文文本
例子
替换
i.setType("text/plain");
与
伊戈尔·波波夫的答案是100%正确的,但如果您想要回退选项,我使用以下方法:
public static Intent createEmailIntent(final String toEmail,
final String subject,
final String message)
{
Intent sendTo = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:" + Uri.encode(toEmail) +
"?subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(message);
Uri uri = Uri.parse(uriText);
sendTo.setData(uri);
List<ResolveInfo> resolveInfos =
getPackageManager().queryIntentActivities(sendTo, 0);
// Emulators may not like this check...
if (!resolveInfos.isEmpty())
{
return sendTo;
}
// Nothing resolves send to, so fallback to send...
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");
send.putExtra(Intent.EXTRA_EMAIL,
new String[] { toEmail });
send.putExtra(Intent.EXTRA_SUBJECT, subject);
send.putExtra(Intent.EXTRA_TEXT, message);
return Intent.createChooser(send, "Your Title Here");
}
publicstaticintent创建emailintent(邮件的最终字符串,
最后一个字符串主题,
最终字符串消息)
{
意向发送至=新意向(意向.行动\发送至);
字符串uriText=“mailto:”+Uri.encode(toEmail)+
“?主题=“+Uri.encode(主题)+
“&body=“+Uri.encode(消息);
Uri=Uri.parse(uriText);
setData(uri);
列表解析信息=
getPackageManager().QueryInputActivities(发送到,0);
//模拟器可能不喜欢此检查。。。
如果(!resolveInfos.isEmpty())
{
返回发送到;
}
//没有解决发送到的问题,因此回退发送。。。
意向发送=新意向(意向.行动\发送);
send.setType(“文本/普通”);
发送.putExtra(Intent.EXTRA_电子邮件,
新字符串[]{toEmail});
send.putExtra(Intent.EXTRA_SUBJECT,SUBJECT);
send.putExtra(Intent.EXTRA_文本、消息);
返回Intent.createChooser(发送“此处的标题”);
}
接受的答案在4.1.2中不起作用。这应适用于所有平台:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
startActivity(Intent.createChooser(emailIntent, "Send email..."));
希望这有帮助 这是从Android官方文档中引用的,我已经在Android 4.4上进行了测试,效果非常好。请参阅上的更多示例
你能告诉我怎么给这个添加图像吗?我尝试了附加=(imagefilepath)(&attach)。但是,它似乎不起作用!当我使用
ACTION\u SENDTO
时,意图选择器会显示未安装任何应用程序来执行此意图。我使用的是安卓4.1.2,我安装了一个电子邮件应用程序……当我从ACTION_Send更改为ACTION_SENDTOWorks时,我收到了相同的消息,就像安卓6.0.1中的魅力一样。我将尝试在我的应用程序中使用它。但是最后一行-chooser->createChooser我会更新我的答案,没有方法chooser
,它是createChooser()
。如果我想添加附件怎么办?有两个解决方案,如果你只有一个,你可以使用Intent.EXTRA\u流,正如你在这里看到的(尽管我不知道不同的邮件应用程序对此的支持是什么): . 只有当你有一个附件时,这才有效。如果你有多个附件,我认为你必须将附件放在正文中,然后从内容链接到它。使用MIME类型执行发送操作是个坏主意,因为你基本上是在指示Android提供一个支持发送message/rfc822
类型文件的应用程序列表。这与发送电子邮件不同。改用mailto:
协议,因为这是电子邮件客户端真正理解的。是的,但是mailto:不支持附件。@EdBurnette事实上,“mailto:”是否支持附件取决于邮件应用程序。例如,最新的“K9邮件”支持将mailto与附件一起使用。不幸的是,多个附件使Gmail与mailto:崩溃:(了解了如何使用多个附件执行此操作:如果您不知道收件人的地址,则无法使用fromParts
构建Uri
,但必须使用Uri.parse(“mailto:”)
并将其传递给Intent.setData
。然后,如果你除了主题之外还有一些正文文本,你可以使用Intent.EXTRA_text
将其传递给Intent。如果你不知道收件人的地址,只需在那里输入一个空字符串。我刚刚检查过,它是否正常工作。如果你这样做,似乎我只是想偷我的客户一些钱,而不是检索反馈:S注意,这只发生在PayPal应用程序的最后一次更新(大约一周前)中。我们可以防止这种情况发生吗?这对我的客户没有帮助
public static Intent createEmailIntent(final String toEmail,
final String subject,
final String message)
{
Intent sendTo = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:" + Uri.encode(toEmail) +
"?subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(message);
Uri uri = Uri.parse(uriText);
sendTo.setData(uri);
List<ResolveInfo> resolveInfos =
getPackageManager().queryIntentActivities(sendTo, 0);
// Emulators may not like this check...
if (!resolveInfos.isEmpty())
{
return sendTo;
}
// Nothing resolves send to, so fallback to send...
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");
send.putExtra(Intent.EXTRA_EMAIL,
new String[] { toEmail });
send.putExtra(Intent.EXTRA_SUBJECT, subject);
send.putExtra(Intent.EXTRA_TEXT, message);
return Intent.createChooser(send, "Your Title Here");
}
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
startActivity(Intent.createChooser(emailIntent, "Send 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);
}
}
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","opinions@gmail.com.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "IndiaTV News - Mobile App Feedback");
emailIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(Settings.this.getString(R.string.MailContent)));
startActivityForResult(Intent.createChooser(emailIntent, "Send email..."),0);