Intent.EXTRA_EMAIL ne remplit pas le champ À


87

J'essaye d'utiliser un pour envoyer un e-mail depuis mon application mais le champ À de l'e-mail ne sera pas rempli. Si j'ajoute du code pour remplir le sujet ou le texte, ils fonctionnent bien. Seul le champ À ne sera pas rempli.

J'ai également essayé de changer le type en "text / plain" et "text / html" mais j'obtiens le même problème. Quelqu'un peut-il aider s'il vous plaît?

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

Le client de messagerie que j'essaie d'utiliser est Gmail

Réponses:


213

Je pense que tu ne passes pas recipientcommearray of string

ça devrait être comme

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

19
Android ... pourquoi es-tu si pathétique?
Bugs Happen

4
hahaha, vous m'avez fait rire +1 Million @BugsHappen .. Raisons: C'est un open source mais la documentation n'est pas 100% satisfaisante, les fabricants de périphériques modifient en fonction de leurs besoins (la plupart des périphériques sont bon marché et inutiles), les développeurs ne lisent pas "développeur". android.com ".
MKJParekh

4
Assurez-vous également que vous ne le faites intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) PAS, car list.toArray () produit Object [] et non String []
nikib3ro

@ kape123 cela fonctionne cependantintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Utilisez ceci

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

``}

Cela fonctionnera :)
C'est ce que la documentation Android dit à propos de Intent.Extra_Email
-Un tableau de chaînes de toutes les adresses e-mail des destinataires «À».
Vous devez donc alimenter correctement la chaîne.Vous pouvez en savoir plus ici
http://developer.android.com/guide/components/intents-common.html#Email et ici http://developer.android.com/guide/topics/resources /string-resource.html Ou utilisez l'action ACTION_SENDTO et incluez le schéma de données "mailto:". Par exemple:

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

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

Cela signifie qu'aucune application ne peut effectuer cette action.
Abu Nayem le

2

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

Vous pouvez également utiliser [ val emailIntent = Intent(Intent.ACTION_SENDTO)] pour appeler le client de messagerie direct

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

J'espère que cet extrait de code aidera les développeurs de kotlin.


1

Deux choses:

1 - Vous devez définir la variable constante d'action comme ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Si vous souhaitez qu'il soit ouvert uniquement par le mail alors utilisez la méthode setData (): intentEmail.setData(Uri.parse("mailto:"));Sinon, il vous demandera de l'ouvrir sous forme de texte, image, fichier audio par d'autres applications présentes sur votre appareil.

3 - Vous devez transmettre la chaîne d'ID de courrier électronique en tant qu'objet de tableau et pas seulement en tant que chaîne. La chaîne est: "nom@email.com" . Array L'objet de la chaîne est: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.