Intent.EXTRA_EMAIL non popola il campo A.


90

Sto cercando di utilizzare un file per inviare un'e-mail dalla mia applicazione ma il campo A dell'e-mail non verrà compilato. Se aggiungo codice per inserire l'oggetto o il testo, funzionano bene. Solo il campo A non verrà compilato.

Ho anche provato a cambiare il tipo in "text / plain" e "text / html" ma ottengo lo stesso problema. Qualcuno può aiutare, per favore?

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

Il client di posta che sto cercando di utilizzare è Gmail

Risposte:


220

Penso che tu non stia passando recipientcomearray of string

dovrebbe essere come

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

21
Android ... perché sei così patetico?
bug si verificano il

4
hahaha, mi hai fatto ridere +1 Million @BugsHappen .. Motivi: è un open source ma la documentazione non è soddisfacente al 100%, i produttori di dispositivi modificano in base alle loro esigenze (la maggior parte dei dispositivi sono economici e inutili), gli sviluppatori non leggono "developer. android.com ".
MKJParekh

4
Assicurati anche di NON farlo intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) NON FUNZIONA poiché list.toArray () produce Object [] e non String []
nikib3ro,

@ kape123 questo funziona comunqueintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Usa questo

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

``}

Questo funzionerà :)
Questo è ciò che dice la documentazione di Android su Intent.Extra_Email: un
array di stringhe di tutti gli indirizzi email dei destinatari "A".
Quindi dovresti inserire correttamente la stringa Puoi leggere di più qui
http://developer.android.com/guide/components/intents-common.html#Email e qui http://developer.android.com/guide/topics/resources /string-resource.html Oppure utilizza l'azione ACTION_SENDTO e includi lo schema di dati "mailto:". Per esempio:

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

3

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

Inoltre è possibile utilizzare [ val emailIntent = Intent(Intent.ACTION_SENDTO)] per richiamare il client di posta elettronica diretto

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

Spero che questo frammento di codice possa aiutare gli sviluppatori di kotlin.


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

Sta dicendo che nessuna app può eseguire questa azione.
Abu Nayem

2

Un paio di cose:

1 - Devi impostare la variabile della costante di azione come ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Se vuoi che venga aperto solo dalla posta usa il metodo setData (): intentEmail.setData(Uri.parse("mailto:"));altrimenti ti chiederà di aprirlo come testo, immagine, file audio da altre app presenti sul tuo dispositivo.

3 - È necessario passare la stringa dell'ID e-mail come oggetto array e non solo come stringa. La stringa è: "nome@email.com" . L'oggetto array della stringa è: new String [] {"email1", "email2", "more_email"} .

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

0

Questo è ciò che funziona per 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.