EXTRA_EMAIL 未填充 To 字段

我试图使用一个 发送电子邮件从我的应用程序,但电子邮件的收件人字段将不填充。如果我添加代码来填充主题或文本,它们工作得很好。只有 To 字段不会填充。

我也尝试过将类型更改为“ text/platin”和“ text/html”,但是我遇到了同样的问题。有人能帮忙吗?

public void Email(){


Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");  //set the email recipient
String recipient = getString(R.string.IntegralEmailAddress);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL  , recipient);
//let the user choose what email client to use
startActivity(Intent.createChooser(emailIntent, "Send mail using...")); }

我正在尝试使用的电子邮件客户端是 Gmail

35262 次浏览

I think you are not passing recipient as array of string

it should be like

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "someone@gmail.com" });
private void callSendMeMail() {
Intent Email = new Intent(Intent.ACTION_SEND);
Email.setType("text/email");
Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "me@gmail.com" });
Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
}

Use this

public void Email(){
// use this to declare your 'recipient' string and get your email recipient from your string xml file
Resources res = getResources();
String recipient = getString(R.string.IntegralEmailAddress);
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");  //set the email recipient
emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
//let the user choose what email client to use
startActivity(Intent.createChooser(emailIntent, "Send mail using..."));


``}

This will work :)
This is what android documentation says about Intent.Extra_Email
-A string array of all "To" recipient email addresses.
So you should feed string properly You can read more over here
http://developer.android.com/guide/components/intents-common.html#Email and here http://developer.android.com/guide/topics/resources/string-resource.html Or use the ACTION_SENDTO action and include the "mailto:" data scheme. For example:

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

Couple of things:

1 - You need to set the action constant variable as ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - If you want it to be opened by only the mail then use the setData() method: intentEmail.setData(Uri.parse("mailto:")); Otherwise it will ask you to open it as text, image, audio file by other apps present on your device.

3 - You need to pass the email ID string as an array object and not just as a string. String is: "name@email.com". Array Object of the string is: new String[] {"email1", "email2", "more_email"}.

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});

In Kotlin - Android

fun sendMail(
activity: Activity,
emailIds: Array<String>,
subject: String,
textMessage: String
) {




val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.type = "text/plain"
emailIntent.putExtra(Intent.EXTRA_EMAIL, emailIds)
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage)
emailIntent.setType("message/rfc822")
try {
activity.startActivity(
Intent.createChooser(
emailIntent,
"Send email using..."
)
)
} catch (ex: ActivityNotFoundException) {
Toast.makeText(
activity,
"No email clients installed.",
Toast.LENGTH_SHORT
).show()
}
}

Also you can use [ val emailIntent = Intent(Intent.ACTION_SENDTO) ] to invoke direct email client

//argument of function
val subject = "subject of you email"
val eMailMessageTxt = "Add Message here"


val eMailId1 = "emailId1@gmail.com"
val eMailId2 = "emailId2@gmail.com"
val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)


//Calling function
sendMail(this, eMailIds, subject, eMailMessageTxt)

I hope this code snippet will help to kotlin developers.

This is what works for me:

val email = "recipient@email.com"
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:$email")
intent.putExtra(Intent.EXTRA_SUBJECT,"My Subject")
startActivity(intent)

Made me waste so much time! Thanks to the accepted answer! I'll add some Kotlin code with a couple of handy extension functions

fun Activity.hasEmailClient(): Boolean =
emailIntent("someAddress", "someSubject", "someText")
.resolveActivity(packageManager) != null


fun Activity.openEmailClient(address: String, subject: String, text: String) {
startActivity(emailIntent(address, subject, text))
}


private fun emailIntent(address: String, subject: String, text: String): Intent =
Intent(Intent.ACTION_SENDTO).apply {
type = "text/plain"
data = Uri.parse("mailto:")
putExtra(Intent.EXTRA_EMAIL, arrayOf(address))
putExtra(Intent.EXTRA_SUBJECT, subject)
putExtra(Intent.EXTRA_TEXT, text)
}

feel free to replace Activity with Fragment if it suits your needs. Example usage:

if (hasEmailClient()) {
openEmailClient(
"example@email.info",
"this is the subject",
"this is the text"
)
}

First you should set the value of Intent.EXTRA_EMAIL as Array of Strings type like this:

emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@gmail.com" });

If this not works then simply uninstall the app and again Run....

      Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "xyx@gmail.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}