Invia intento e-mail


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

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

Il codice sopra si apre una finestra di dialogo che mostra le seguenti app: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype ecc.

In realtà, voglio filtrare queste opzioni di elenco. Voglio mostrare solo le app relative alla posta elettronica, ad esempio Gmail, Yahoo Mail. Come farlo?

Ho visto questo esempio sull'applicazione 'Android Market'.

  1. Apri l'app Android Market
  2. Apri qualsiasi applicazione in cui lo sviluppatore ha specificato il suo indirizzo e-mail. (Se non riesci a trovare tale app, apri la mia app: - market: // details? Id = com.becomputer06.vehicle.diary.free, O cerca per 'Diario del veicolo')
  3. Scorri verso il basso fino a "SVILUPPATORE"
  4. Fai clic su "Invia email"

La finestra di dialogo mostra solo le app di posta elettronica, ad es. Gmail, Yahoo Mail ecc. Non mostra Bluetooth, Orkut ecc. Quale codice genera tale finestra di dialogo?


4
Spiacenti, questo non è possibile con Intent.ACTION_SEND. Forse funziona con un intento direttamente sull'app Gmail, ma non so se sia possibile.
Thommy il

19
Nel caso in cui qualcuno capisca qui sulle intenzioni dell'email, EXTRA_MAIL dovrebbe corrispondere a un String[], non solo a Stringcome mostrato qui.
pietre preziose

possibile duplicato di Invia e-mail via gmail
Sergey Glotov


Vedi qui per alcuni buoni consigli: medium.com/@cketti/…
Felix D.

Risposte:


218

quando cambierai il tuo intent.setType come sotto otterrai

intent.setType("text/plain");

Utilizzare android.content.Intent.ACTION_SENDTOper ottenere solo l'elenco dei client di posta elettronica, senza Facebook o altre app. Solo i client di posta elettronica. Ex:

new Intent(Intent.ACTION_SENDTO);

Non consiglierei di accedere direttamente all'app di posta elettronica. Consenti all'utente di scegliere la sua app di posta elettronica preferita. Non costringerlo.

Se usi ACTION_SENDTO, putExtra non funziona per aggiungere oggetto e testo all'intento. Usa Uri per aggiungere l'oggetto e il corpo del testo.

EDIT: possiamo usare message/rfc822invece "text/plain"come tipo MIME. Tuttavia, ciò non indica "offri solo client di posta elettronica", ma indica "offri tutto ciò che supporta i dati di messaggio / rfc822". Ciò potrebbe facilmente includere alcune applicazioni che non sono client di posta elettronica.

message/rfc822 supporta i tipi MIME di .mhtml, .mht, .mime


7
Potete per favore fornire un po 'di codice per produrre l'output desiderato?
dira


76
Il selettore di intenti dice no apps installed to perform this intentquando uso ACTION_SENDTO. Sto usando Android 4.1.2 e ho un'app di posta elettronica installata ...
ffleandro,

4
Il modo "corretto" è la risposta di Magnus. Raccomando il poster originale per cambiare la risposta accettata.
Jhabbott,

8
L'utilizzo del tipo MIME per eseguire un'operazione di invio è una cattiva idea, perché in pratica stai istruendo Android a fornire un elenco di app che supportano l'invio di un file di tipo message/rfc822. Questo è non è la stessa come l'invio di una e-mail. Utilizzare mailto:invece il protocollo, perché è quello che i client di posta elettronica comprendono effettivamente.
Paul Lammertsma,

872

La risposta accettata non funziona sulla 4.1.2. Questo dovrebbe funzionare su tutte le piattaforme:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

Spero che sia di aiuto.

Aggiornamento: Secondo marcwjj , sembra che su 4.3, dobbiamo far passare l'array string anziché una stringa affinché l'indirizzo e-mail funzioni. Potrebbe essere necessario aggiungere un'altra riga:

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

Collegamento di riferimento


7
Hai ragione, e nemmeno su 4.2. Quindi questa è in realtà l'unica risposta corretta, grazie!
mDroidd

12
Questo è perfetto. Qualcuno di seguito ha affermato che specificare la parte "mailto" è ciò che restringe le opzioni disponibili ai client di posta elettronica. Usando Uri.fromParts ("mailto", "", null) metterai il cursore nel campo del destinatario - perfetto per quello che mi serviva.
Shaggy,

24
Prova questa emailIntent.putExtra (Intent.EXTRA_TEXT, "I'm email body.");
Thanhbinh84

15
Se non hai un destinatario specifico, funziona anche:Uri.fromParts("mailto", "", null)
Phil

25
Questo non funziona più sul mio Android 4.3. Consulta il documento Android ufficiale sull'invio di e-mail come intento, che funziona perfettamente: developer.android.com/guide/components/…
marcwjj

244

Esistono tre approcci principali:

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. Abitudine Uri:

Uri uri = Uri.parse("mailto:" + email)
    .buildUpon()
    .appendQueryParameter("subject", subject)
    .appendQueryParameter("body", body)
    .build();

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));

2. Utilizzo di Intentextra:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3. Libreria di supporto ShareCompat:

Activity activity = /* Your activity here */

ShareCompat.IntentBuilder.from(activity)
    .setType("message/rfc822")
    .addEmailTo(email)
    .setSubject(subject)
    .setText(body)
    //.setHtmlText(body) //If you are using HTML in your body text
    .setChooserTitle(chooserTitle)
    .startChooser();

1
Questo ha funzionato molto meglio per me - le altre opzioni hanno mostrato alcune cose semplici (Skype, ad esempio) come possibili gestori.
Chris Rae,

1
Se hai un %simbolo nel buffer, alcuni caratteri nell'email risultante non saranno codificati correttamente. Devi eseguire la Uri.encodedanza suggerita da @minipif.
Giulio Piancastelli,

12
Queste sono le risposte migliori qui, non perdere tempo a provare gli altri, la seconda qui è quella che ho scelto e funziona perfettamente, mostrando solo le app di posta elettronica, non gDrive, non bluetooth .. ecc. Grazie @ becomputer06
Hugo

1
Fai attenzione al carattere "&". Se hai e carattere nel corpo dell'email, questo metodo interromperà il corpo dopo &. Ad esempio, se invii un corpo come "I am & a body body" otterrai solo "I am"
Emre Koç,

4
ShareCompat produce quasi tutte le app, non solo i client di posta elettronica!
rpattabi,

111

Questo è citato dal documento ufficiale di Android, l'ho testato su Android 4.4 e funziona perfettamente. Vedi altri esempi su https://developer.android.com/guide/components/intents-common.html#Email

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

6
Concordato! Sono sorpreso che una risposta come questa sia così in fondo alla lista. Immagino che debba essere stato un cambiamento relativamente recente in Android Docs.
Mikey,

Grande! affidabile, si riferiva alla "Bibbia" degli sviluppatori di app Android.
dev_android,

1
I due punti dopo mailto hanno fatto il trucco per me! Stavo usando "mailto" invece di "mailto:"
Nigel Crasto

1
Lavorando su 5.1.1. Le altre opzioni non funzionano per me.
Juanin,

1
EXTRA_EMAILnon funziona per me, quindi ho usatoUri.parse("mailto: " + myEmail)
Pratik Butani il

89

Una risposta tardiva, anche se ho trovato una soluzione che potesse aiutare gli altri:

Versione Java

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Versione di Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


Questo è stato il mio risultato (solo Gmail + Posta in arrivo suggerito):

la mia uscita

Ho ottenuto questa soluzione dal sito degli sviluppatori Android .


2
Per me era importante che non ci fosse spazio tra mailtoe l'e-mail:mailto:abc@xyz.com
AlvaroSantisteban

Questa è la risposta corretta
nibbana,

36

Questo funziona per me:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] { "me@somewhere.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");

startActivity(Intent.createChooser(intent, "Email via..."));

cioè usare l' ACTION_SENDTOazione piuttosto che l' ACTION_SENDazione. L'ho provato su un paio di dispositivi Android 4.4 e limita il pop-up di selezione per visualizzare solo le applicazioni di posta elettronica (Email, Gmail, Yahoo Mail ecc.) E inserisce correttamente l'indirizzo e-mail e l'oggetto nell'email.


35

Provare:

intent.setType("message/rfc822");

Ha ragione, l'ho provato e offre [Drive, Email, Gmail, Skype], questa dovrebbe essere la "risposta giusta"
gurbieta,

18
L'utilizzo del tipo MIME per eseguire un'operazione di invio è una cattiva idea, perché in pratica stai istruendo Android a fornire un elenco di app che supportano l'invio di un file di tipo message/rfc822. Questo è non è la stessa come l'invio di una e-mail. Utilizzare mailto:invece il protocollo, perché è quello che i client di posta elettronica comprendono effettivamente.
Paul Lammertsma,

34

Questo è il modo corretto di inviare l'intenzione e-mail secondo la documentazione ufficiale per gli sviluppatori Android

Aggiungi queste righe di codice alla tua app:

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

Opzionale: aggiungi il corpo e il soggetto, in questo modo

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

Hai già aggiunto questa linea, ma è bene averla per i nuovi utenti

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

Questo sarà l'indirizzo del destinatario, nel senso che l'utente ti invierà (lo sviluppatore) un'e-mail.


@ barnacle.m Grazie! È anche uno dei metodi più semplici. Il problema è che la mia risposta non ottiene abbastanza voti :(
Avi Parshan

1
È perché ci sono molte risposte simili, ma questo indica la documentazione ufficiale di Android sull'argomento.
barnacle.m,

1
Non sono riuscito a inviare l'indirizzo e-mail. L'ho corretto in questo modo intent.data = Uri.parse ("mailto: somemail@xyz.com")
Hitesh Bisht

18

Finalmente trovi il modo migliore di fare

String to = "test@gmail.com";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
        "?&subject=" + Uri.encode(subject) +
        "&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);

Sei fantastico, amico.
Ashik,

Nessun problema amico
Ajay Shrestha,

2
Funziona perfettamente.
Solanki Kamlesh,


funziona bene, continuate così
Jacks

15

Se si desidera solo i client di posta elettronica, è necessario utilizzare android.content.Intent.EXTRA_EMAILun array. Ecco un esempio:

final Intent result = new Intent(android.content.Intent.ACTION_SEND);
result.setType("plain/text");
result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient });
result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
result.putExtra(android.content.Intent.EXTRA_TEXT, body);

3
no, fa apparire ancora molte altre app - molto più diACTION_SENDTO
Dori l'

10

Il seguente codice funziona bene per me.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"});
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);

8

Dai documenti per sviluppatori Android :

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

8

Modifica: non funziona più con le nuove versioni di Gmail

Questo è stato l'unico modo che ho trovato in quel momento per farlo funzionare con qualsiasi personaggio.

La risposta di doreamon è la strada giusta da percorrere ora, poiché funziona con tutti i personaggi nelle nuove versioni di Gmail.

Vecchia risposta:


Ecco il mio. Sembra funzionare su tutte le versioni di Android, con supporto per oggetto e corpo del messaggio e supporto completo per i caratteri utf-8:

public static void email(Context context, String to, String subject, String body) {
    StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to));
    if (subject != null) {
        builder.append("?subject=" + Uri.encode(Uri.encode(subject)));
        if (body != null) {
            builder.append("&body=" + Uri.encode(Uri.encode(body)));
        }
    }
    String uri = builder.toString();
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
    context.startActivity(intent);
}

1
+1 Uri.encodeè la strada giusta da percorrere. Ma perché chiamarlo due volte per soggetto e corpo?
Giulio Piancastelli,

Quindi, fare la codifica da soli è solo una cattiva idea. Meglio usare un Intento corretto con gli extra necessari, vedi ad esempio stackoverflow.com/a/15022222
Giulio Piancastelli

Per me questa è la risposta migliore perché altre soluzioni funzionano correttamente solo con alcune app di posta elettronica. Questo funziona con tutte le app di posta elettronica che ho testato.
Egis,

7

Nessuna di queste soluzioni funzionava per me. Ecco una soluzione minima che funziona su Lollipop. Sul mio dispositivo, solo Gmail e le app di posta elettronica native vengono visualizzate nell'elenco di selezione risultante.

Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
                                Uri.parse("mailto:" + Uri.encode(address)));

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(emailIntent, "Send email via..."));

7

Funziona su tutte le versioni di Android:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .buildUpon()
            .appendQueryParameter("subject", "subject")
            .appendQueryParameter("body", "body")
            .build();
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

La tua risposta mi ha aiutato. Grazie
Adnan Khan,

5

Il seguente codice ha funzionato per me !!

import android.support.v4.app.ShareCompat;
    .
    .
    .
    .
final Intent intent = ShareCompat.IntentBuilder
                        .from(activity)
                        .setType("application/txt")
                        .setSubject(subject)
                        .setText("Hii")
                        .setChooserTitle("Select One")
                        .createChooserIntent()
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
                        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

activity.startActivity(intent);

5

Questo funziona perfettamente per me:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));

5

Se vuoi assicurarti che il tuo intento sia gestito solo da un'app di posta elettronica (e non da altre app di messaggistica o social), usa l' ACTION_SENDTOazione e includi lo schema di dati "mailto:". Per esempio:

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

Ho trovato questo in https://developer.android.com/guide/components/intents-common.html#Email


5

a Kotlin se qualcuno sta guardando

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

4

La maggior parte di queste risposte funziona solo per un semplice caso quando non si invia un allegato . Nel mio caso, a volte ho bisogno di inviare un allegato (ACTION_SEND) o due allegati (ACTION_SEND_MULTIPLE).

Quindi ho preso i migliori approcci da questo thread e li ho combinati. Utilizza le librerie di supporto ShareCompat.IntentBuilderma mostro solo le app che corrispondono a ACTION_SENDTO con "mailto:" uri. In questo modo ottengo solo un elenco di app di posta elettronica con supporto per gli allegati:

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}

Sembra che potrebbe essere utile; qualche possibilità di ottenerlo in Java?
Kyle Humfeld,

1
Kotlin è molto simile a Java, dovresti essere in grado di copiare e modificare alcune cose.
David Vávra,

3

L'uso intent.setType("message/rfc822");funziona ma mostra app extra che non gestiscono necessariamente le e-mail (ad esempio GDrive). L'utilizzo Intent.ACTION_SENDTOcon setType("text/plain")è il migliore ma devi aggiungere setData(Uri.parse("mailto:"))per ottenere i migliori risultati (solo app di posta elettronica). Il codice completo è il seguente:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));

Perfetta soultion
Daxesh Vekariya il

2

Se desideri scegliere come target Gmail, puoi procedere come segue. Tieni presente che l'intento è "ACTION_SENDTO" e non "ACTION_SEND" e che i campi di intento extra non sono necessari per Gmail.

String uriText =
    "mailto:youremail@gmail.com" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}

2

Sto aggiornando la risposta di Adil a Kotlin,

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "test@email.com" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}

Ciò fallisce anche quando Gmail è sull'app.
AndroidDev

@AndroidDev in quale dispositivo stai affrontando il problema?
Kishan Solanki,

2

Si prega di utilizzare il seguente codice:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }

1

Forse dovresti provare questo: intent.setType("plain/text");

L'ho trovato qui . L'ho usato nella mia app e mostra solo le opzioni di posta elettronica e Gmail.


2
"plain / text" mostra Bluetooth, Skype ecc. Verifica l'output desiderato nell'app Android Market. I passaggi sono elencati nella domanda.
dira

1
L'utilizzo del tipo MIME per eseguire un'operazione di invio è una cattiva idea, perché in pratica stai istruendo Android a fornire un elenco di app che supportano l'invio di un file di tipo plain/texte che non è nemmeno un tipo MIME valido. Questo è non è la stessa come l'invio di una e-mail. Utilizzare mailto:invece il protocollo, perché è quello che i client di posta elettronica comprendono effettivamente.
Paul Lammertsma,

1

Scrivi un'email nel client di posta elettronica del telefono:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Usa questo:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

usa il livello build:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'

1

Questo è quello che uso e funziona per me:

//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";

//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);

startActivity(variableName);

Ciò consentirà inoltre all'utente di scegliere la propria app di posta elettronica preferita. L'unica cosa che non ti consente di fare è impostare l'indirizzo e-mail del destinatario.


Manca un a "sulla seconda riga.
Tim

1

Questo codice funziona nel mio dispositivo

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

apre solo Gmail ed e-mail sul mio dispositivo
Mahen

1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
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.