Intent.EXTRA_EMAIL no completa el campo Para

89

Estoy tratando de usar un enviar un correo electrónico desde mi aplicación, pero el campo Para del correo electrónico no se completará. Si agrego código para completar el tema o el texto, funcionan bien. Solo el campo Para no se completará.

También he intentado cambiar el tipo a "text / plain" y "text / html", pero tengo el mismo problema. ¿Alguien puede ayudar por favor?

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

El cliente de correo electrónico que intento utilizar es Gmail.

usuario
fuente

Respuestas:

218

Creo que no estas pasando recipientcomoarray of string

debería ser como

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "[email protected]" });
MKJParekh
fuente
21
Android ... ¿por qué eres tan patético?
Suceden errores
4
jajaja, me hiciste reír +1 Millón de @BugsHappen .. Razones: Es un código abierto pero la documentación no es 100% satisfactoria, los fabricantes de dispositivos modifican según sus necesidades (la mayoría de los dispositivos son baratos e inútiles), los desarrolladores no leen "desarrollador. android.com ".
MKJParekh
4
También asegúrese de que NO lo intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) está
nikib3ro
@ kape123 esto funciona sin embargointent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian
4

Utilizar esta

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

``}

Esto funcionará :)
Esto es lo que dice la documentación de Android sobre Intent.Extra_Email
-Una matriz de cadenas de todas las direcciones de correo electrónico de los destinatarios "Para".
Por lo tanto, debe alimentar la cadena correctamente. Puede leer más aquí
http://developer.android.com/guide/components/intents-common.html#Email y aquí http://developer.android.com/guide/topics/resources /string-resource.html O use la acción ACTION_SENDTO e incluya el esquema de datos "mailto:". Por ejemplo:

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);
}
Nimesh Jain
fuente
3

En 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()
        }
    }

También puede utilizar [ val emailIntent = Intent(Intent.ACTION_SENDTO)] para invocar al cliente de correo electrónico directo

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

val eMailId1 = "[email protected]"
val eMailId2 = "[email protected]"
val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)

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

Espero que este fragmento de código ayude a los desarrolladores de kotlin.

V-9- द
fuente
2
private void callSendMeMail() {
    Intent Email = new Intent(Intent.ACTION_SEND);
    Email.setType("text/email");
    Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
    Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
}
Yuliia Ashomok
fuente
Dice que ninguna aplicación puede realizar esta acción.
Abu Nayem
1

Un par de cosas:

1 - Debe establecer la variable constante de acción como ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Si desea que se abra solo por correo, use el método setData (): de lo intentEmail.setData(Uri.parse("mailto:"));contrario, le pedirá que lo abra como texto, imagen, archivo de audio por otras aplicaciones presentes en su dispositivo.

3 - Debe pasar la cadena de ID de correo electrónico como un objeto de matriz y no solo como una cadena. La cadena es: "[email protected]" . Array El objeto de la cadena es: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]", "[email protected]"});
rohegde7
fuente