Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过gmail发送电子邮件_Android_Email_Android Intent_Gmail - Fatal编程技术网

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