当 select 通过 Gmail 发送电子邮件时电子邮件正文为空

Email body empty when select to send email by Gmail

我正在使用此代码:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",email, null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
activity.startActivity(Intent.createChooser(emailIntent, "Send feedback to xyz"));

2 年。直到现在一切正常。用户可以 select 向客户端发送消息并发送带有预填充数据的反馈。它适用于所有邮件客户端。 最近注意到,如果我 select gmail 客户端 - 邮件正文保持为空,但在其他邮件客户端上正文填充为文本。

有什么想法吗?

要发送带正文的电子邮件,请使用 message/rfc822。

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("message/rfc822");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "to1@example.com", "to2@example.com" });
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject of the email");
sendIntent.putExtra(Intent.EXTRA_TEXT, "Content of the email");
startActivity(sendIntent);

希望对您有所帮助。

我正在使用以下代码并为每个电子邮件客户端工作。 示例:

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email id of receiver"});
intent.putExtra(Intent.EXTRA_SUBJECT, "This is the subject of the email client");
intent.putExtra(Intent.EXTRA_TEXT, "This is the body of the email client");

// this line is for attaching file
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

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

最近我遇到了同样的问题。在搜索时,我发现这是最好的解决方案 (kotlin)(至少对我自己而言):

fun sendEmail(email: String, subject: String, message: String) {
    val emailIntent = Intent(Intent.ACTION_SEND)
    emailIntent.data = Uri.parse("mailto:")
    emailIntent.type = "text/plain"
    emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
    emailIntent.putExtra(Intent.EXTRA_TEXT, message)

    val sendIntent = Intent.createChooser(emailIntent, "Please Choose Email Client...")
    sendIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK

    try {
        context.startActivity(sendIntent)
    } catch (e: Exception) {
        Toast.makeText(context, e.message, Toast.LENGTH_LONG).show()
    }
}

感谢帮助

使用大量建议答案进行测试。 添加 "text/plain" 或 "message/rfc822" 使我的应用停止提供邮件客户端。

找到解决我的问题的答案:

对我来说最有趣的部分是有 2 个意图:

Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
selectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{email});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
emailIntent.setSelector( selectorIntent );
activity.startActivity(Intent.createChooser(emailIntent, "Send feedback to XYZ"));

这解决了问题。

我对 gmail 使用正文属性,对其他电子邮件使用 EXTRA_TEXT。我已经测试了不同的电子邮件应用程序,例如三星电子邮件、oneplus 电子邮件和 LG 电子邮件,它们似乎支持 EXTRA_TEXT 但 gmail 支持 "body" 属性。

 fun composeEmailMessage(context: Context,  subject: String, body: String, emails: Array<String> = arrayOf()) {
    val intent = Intent(Intent.ACTION_SENDTO)
    intent.data = Uri.parse("mailto:")
    intent.putExtra(Intent.EXTRA_EMAIL, emails)
    intent.putExtra(Intent.EXTRA_SUBJECT, subject)
    intent.putExtra(Intent.EXTRA_TEXT, body)//other emails app
    intent.putExtra("body", body)//gmail
    if (intent.resolveActivity(context.packageManager) != null) {
        context.startActivity(Intent.createChooser(intent, "Send email via..."))
    }
}

我有类似的问题。这对我有用:而不是

"mailto"

你必须使用

"mailto:"

我也将“Uri.fromParts”替换为“Uri.parse”