E-Mail-Absicht senden

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

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

Der obige Code öffnet einen Dialog mit folgenden Apps: - Bluetooth, Google Text & Tabellen, Yahoo Mail, Google Mail, Orkut, Skype usw.

Eigentlich möchte ich diese Listenoptionen filtern. Ich möchte nur E-Mail-bezogene Apps anzeigen, z. B. Google Mail, Yahoo Mail. Wie es geht?

Ich habe ein solches Beispiel in der Anwendung "Android Market" gesehen.

  1. Öffnen Sie die Android Market App
  2. Öffnen Sie eine Anwendung, in der der Entwickler seine E-Mail-Adresse angegeben hat. (Wenn Sie eine solche App nicht finden können, öffnen Sie einfach meine App: - market: // details? Id = com.becomputer06.vehicle.diary.free ODER suchen Sie nach 'Fahrzeugtagebuch')
  3. Scrollen Sie nach unten zu 'ENTWICKLER'
  4. Klicken Sie auf "E-Mail senden".

Der Dialog zeigt nur E-Mail-Apps an, z. B. Google Mail, Yahoo Mail usw. Bluetooth, Orkut usw. werden nicht angezeigt. Welcher Code erzeugt einen solchen Dialog?

Dira
quelle
4
Dies ist mit Intent.ACTION_SEND leider nicht möglich. Vielleicht funktioniert es mit einer Absicht direkt zur Google Mail-App, aber ich weiß nicht, ob dies möglich ist.
Thommy
19
Falls hier jemand etwas über E-Mail-Absichten erfährt, sollte EXTRA_MAIL einem entsprechen String[], nicht nur einem, Stringwie hier gezeigt.
Bigstones
Mögliches Duplikat von E-Mail über Google Mail senden
Sergey Glotov
Hier finden Sie einige gute Ratschläge: medium.com/@cketti/…
Felix D.

Antworten:

218

Wenn Sie Ihre intent.setType wie unten ändern, erhalten Sie

intent.setType("text/plain");

Verwenden Sie android.content.Intent.ACTION_SENDTOdiese Option , um nur die Liste der E-Mail-Clients ohne Facebook oder andere Apps abzurufen. Nur die E-Mail-Clients. Ex:

new Intent(Intent.ACTION_SENDTO);

Ich würde nicht vorschlagen, dass Sie direkt zur E-Mail-App gelangen. Lassen Sie den Benutzer seine bevorzugte E-Mail-App auswählen. Beschränke ihn nicht.

Wenn Sie ACTION_SENDTO verwenden, funktioniert putExtra nicht, um der Absicht Betreff und Text hinzuzufügen. Verwenden Sie Uri, um den Betreff und den Text hinzuzufügen.

EDIT: Wir können message/rfc822statt "text/plain"als MIME-Typ verwenden. Dies bedeutet jedoch nicht "nur E-Mail-Clients anbieten", sondern "alles anbieten, was Nachrichten- / RFC822-Daten unterstützt". Dies kann leicht einige Anwendungen einschließen, die keine E-Mail-Clients sind.

message/rfc822 unterstützt MIME-Typen von .mhtml, .mht, .mime

Padma Kumar
quelle
7
Können Sie bitte einen Code angeben, um die gewünschte Ausgabe zu erzielen?
Dira
9
@ becomputer06 beziehen sich auf: stackoverflow.com/questions/8284706/send-email-via-gmail
Padma Kumar
76
Die Absichtsauswahl sagt, no apps installed to perform this intentwenn ich benutze ACTION_SENDTO. Ich benutze Android 4.1.2 und ich habe eine E-Mail-App installiert ...
ffleandro
4
Der "richtige" Weg ist die Antwort von Magnus. Ich empfehle das Originalposter, um die akzeptierte Antwort zu ändern.
Jhabbott
8
Die Verwendung des MIME-Typs zum Ausführen eines Sendevorgangs ist eine schlechte Idee, da Sie Android grundsätzlich anweisen, eine Liste von Apps bereitzustellen, die das Senden einer Datei vom Typ unterstützen message/rfc822. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Sie mailto:stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.
Paul Lammertsma
872

Die akzeptierte Antwort funktioniert auf 4.1.2 nicht. Dies sollte auf allen Plattformen funktionieren:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","[email protected]", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

Hoffe das hilft.

Update: Laut marcwjj müssen wir in 4.3 anscheinend ein String-Array anstelle eines Strings für die E-Mail-Adresse übergeben, damit es funktioniert. Möglicherweise müssen wir noch eine Zeile hinzufügen:

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

Ref Link

thanhbinh84
quelle
7
Sie haben Recht, und das gilt auch nicht für 4.2. Das ist also eigentlich die einzig richtige Antwort, danke!
mDroidd
12
Dies ist perfekt. Jemand unten erwähnte, dass die Angabe des Teils "mailto" die verfügbaren Optionen für E-Mail-Clients einschränkt. Wenn Sie Uri.fromParts ("mailto", "", null) verwenden, wird der Cursor in das Empfängerfeld gesetzt - perfekt für das, was ich brauchte.
Shaggy
24
Versuchen Sie Folgendes: emailIntent.putExtra (Intent.EXTRA_TEXT, "Ich bin ein E-Mail-Text.");
thanhbinh84
15
Wenn Sie keinen bestimmten Empfänger haben, funktioniert dies auch:Uri.fromParts("mailto", "", null)
Phil
25
Dies funktioniert auf meinem Android 4.3 nicht mehr. Bitte
lesen
244

Es gibt drei Hauptansätze:

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

1. Benutzerdefiniert 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. IntentExtras verwenden:

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. Unterstützungsbibliothek 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();
Dira
quelle
1
Das hat für mich viel besser funktioniert - die anderen Optionen haben einige direkte Dinge (zum Beispiel Skype) als mögliche Handler aufgetaucht.
Chris Rae
1
Wenn Sie ein %Symbol im Puffer haben, werden einige Zeichen in der resultierenden E-Mail nicht korrekt codiert. Sie müssen den Uri.encodevon @minipif vorgeschlagenen Tanz ausführen.
Giulio Piancastelli
12
Dies sind die besten Antworten hier. Verschwenden Sie keine Zeit damit, andere auszuprobieren. Die zweite hier ist die, die ich ausgewählt habe. Sie funktioniert perfekt und zeigt nur die reinen E-Mail-Apps, nicht gDrive, nicht Bluetooth. Usw. Danke @ becomputer06
Hugo
1
Sei vorsichtig mit "&" Zeichen. Wenn Sie & Charakter im E-Mail-Text haben, schneidet diese Methode den Körper nach & ab. Wenn Sie beispielsweise einen Körper wie "Ich bin & ein Beispielkörper" senden, erhalten Sie nur "Ich bin"
Emre Koç
4
ShareCompat führt zu fast allen Apps, nicht nur zu E-Mail-Clients!
Rpattabi
111

Dies wird aus dem offiziellen Android-Dokument zitiert. Ich habe es auf Android 4.4 getestet und funktioniert einwandfrei. Weitere Beispiele finden Sie unter 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);
    }
}
marcwjj
quelle
6
Einverstanden! Ich bin überrascht, dass eine Antwort wie diese so weit unten auf der Liste steht. Ich denke, es muss eine relativ neue Änderung in den Android-Dokumenten gewesen sein.
Mikey
Großartig! zuverlässig verwies es auf die "Bibel" der Android-App-Entwickler.
dev_android
1
Der Doppelpunkt nach Mailto hat den Trick für mich getan! Ich habe "mailto" anstelle von "mailto:" verwendet
Nigel Crasto
1
Arbeiten an 5.1.1. Die anderen Optionen funktionieren bei mir nicht.
Juanin
1
EXTRA_EMAILIch habe nicht für mich gearbeitet, also habe ichUri.parse("mailto: " + myEmail)
Pratik Butani
89

Eine späte Antwort, obwohl ich eine Lösung gefunden habe, die anderen helfen könnte:

Java-Version

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:[email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Kotlin-Version

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:[email protected]")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


Dies war meine Ausgabe (nur Google Mail + Posteingang empfohlen):

meine Ausgabe

Ich habe diese Lösung von der Android-Entwicklerseite erhalten.

capt.swag
quelle
2
Für mich war es wichtig, dass zwischen mailtound der E-Mail kein Leerzeichen steht :mailto:[email protected]
AlvaroSantisteban
Das ist die richtige Antwort.
Nibbana
36

Das funktioniert bei mir:

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

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

dh verwenden Sie die ACTION_SENDTOAktion anstelle der ACTION_SENDAktion. Ich habe es auf einigen Android 4.4-Geräten versucht und es beschränkt das Popup der Auswahl auf die Anzeige von E-Mail-Anwendungen (E-Mail, Google Mail, Yahoo Mail usw.) und fügt die E-Mail-Adresse und den Betreff korrekt in die E-Mail ein.

Adil Hussain
quelle
35

Versuchen:

intent.setType("message/rfc822");
Magnus
quelle
Er hat recht, ich habe es versucht und bietet [Laufwerk, E-Mail, Google Mail, Skype] an, dies sollte die "richtige Antwort" sein
gurbieta
18
Die Verwendung des MIME-Typs zum Ausführen eines Sendevorgangs ist eine schlechte Idee, da Sie Android grundsätzlich anweisen, eine Liste von Apps bereitzustellen, die das Senden einer Datei vom Typ unterstützen message/rfc822. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Sie mailto:stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.
Paul Lammertsma
34

Dies ist der richtige Weg, um die E-Mail-Absicht gemäß der offiziellen Dokumentation für Android-Entwickler zu senden

Fügen Sie Ihrer App folgende Codezeilen hinzu:

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

Optional: Fügen Sie den Körper und das Motiv wie folgt hinzu

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

Sie haben diese Zeile bereits hinzugefügt, aber gut für neue Benutzer

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

Dies ist die Adresse des Empfängers, dh der Benutzer sendet Ihnen (dem Entwickler) eine E-Mail.

Avi Parshan
quelle
@ barnacle.m Danke! Es ist auch eine der einfacheren Methoden. Das Problem ist, dass meine Antwort nicht genug positive
Stimmen
1
Das liegt daran, dass es viele ähnliche Antworten gibt, aber diese weist auf die offizielle Android-Dokumentation zu diesem Thema hin.
barnacle.m
1
Ich konnte keine E-Mail-Adresse senden. Ich habe es wie folgt behoben: intent.data = Uri.parse ("mailto: [email protected]")
Hitesh Bisht
18

Endlich den besten Weg finden

String to = "[email protected]";
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);
Ajay Shrestha
quelle
Du bist großartig, Alter.
Ashik
Kein Problem, Alter
Ajay Shrestha
2
Funktioniert perfekt.
Solanki Kamlesh
Schauen Sie sich diesen Artikel an, der ihn ausführlich beschreibt: medium.com/@cketti/…
Bruno Bieri
funktioniert gut, weiter so
Jacks
15

Wenn Sie nur die E-Mail-Clients möchten, sollten Sie diese android.content.Intent.EXTRA_EMAILmit einem Array verwenden. Hier ein Beispiel:

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);
Addev
quelle
3
Nein, bringt immer noch viele andere Apps - viel mehr alsACTION_SENDTO
Dori
10

Der folgende Code funktioniert gut für mich.

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);
Anam Ansari
quelle
8

Von Android-Entwicklern docs :

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);
    }
}
Marvatron
quelle
8

Bearbeiten: Funktioniert nicht mehr mit neuen Versionen von Google Mail

Dies war der einzige Weg, den ich damals fand, um es mit irgendwelchen Charakteren zum Laufen zu bringen.

Die Antwort von doreamon ist jetzt der richtige Weg, da sie mit allen Zeichen in neuen Versionen von Google Mail funktioniert.

Alte Antwort:


Hier ist mein. Es scheint auf allen Android-Versionen zu funktionieren, mit Unterstützung für Betreff und Nachrichtentext sowie vollständiger Unterstützung für utf-8-Zeichen:

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);
}
Minipif
quelle
1
+1 Uri.encodeist der richtige Weg. Aber warum zweimal für Subjekt und Körper nennen?
Giulio Piancastelli
Die Codierung selbst durchzuführen ist also nur eine schlechte Idee. Verwenden Sie besser eine richtige Absicht mit den erforderlichen Extras, siehe z. B. stackoverflow.com/a/15022222
Giulio Piancastelli
Für mich ist dies die beste Antwort, da andere Lösungen nur mit einigen E-Mail-Apps korrekt funktionieren. Dieser funktioniert mit jeder E-Mail-App, die ich getestet habe.
Egis
7

Keine dieser Lösungen funktionierte für mich. Hier ist eine minimale Lösung, die auf Lollipop funktioniert. Auf meinem Gerät werden nur Google Mail und die nativen E-Mail-Apps in der resultierenden Auswahlliste angezeigt.

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

Funktioniert auf allen Android-Versionen:

String[] TO = {"[email protected]"};
    Uri uri = Uri.parse("mailto:[email protected]")
            .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..."));
Usama Saeed US
quelle
Ihre Antwort hat mir geholfen. Danke
Adnan Khan
5

Der folgende Code hat bei mir funktioniert !!

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);
Suyog Gunjal
quelle
5

Das funktioniert bei mir ganz gut:

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

Wenn Sie sicherstellen möchten, dass Ihre Absicht nur von einer E-Mail-App (und nicht von anderen Textnachrichten oder sozialen Apps) verarbeitet wird, verwenden Sie die ACTION_SENDTOAktion und fügen Sie das Datenschema "mailto:" hinzu. Zum Beispiel:

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

Ich habe dies in https://developer.android.com/guide/components/intents-common.html#Email gefunden

Lamine Slimany
quelle
5

in Kotlin, wenn jemand sucht

val emailArrray:Array<String> = arrayOf("[email protected]")
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);
}
mughil
quelle
4

Die meisten dieser Antworten funktionieren nur für einen einfachen Fall, wenn Sie keinen Anhang senden . In meinem Fall muss ich manchmal einen Anhang (ACTION_SEND) oder zwei Anhänge (ACTION_SEND_MULTIPLE) senden.

Also habe ich die besten Ansätze aus diesem Thread genommen und sie kombiniert. Es werden Support-Bibliotheken verwendet, ShareCompat.IntentBuilderaber ich zeige nur Apps, die mit ACTION_SENDTO und "mailto:" uri übereinstimmen. Auf diese Weise erhalte ich nur eine Liste der E-Mail-Apps mit Anhangsunterstützung:

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
}
David Vávra
quelle
Dies scheint nützlich zu sein. Gibt es eine Chance, es in Java zu bekommen?
Kyle Humfeld
1
Kotlin ist Java sehr ähnlich. Sie sollten in der Lage sein, zu kopieren, einzufügen und nur einige Dinge zu ändern.
David Vávra
3

Die Verwendung intent.setType("message/rfc822");funktioniert, zeigt jedoch zusätzliche Apps an, die nicht unbedingt E-Mails verarbeiten (z. B. GDrive). Die Verwendung Intent.ACTION_SENDTOmit setType("text/plain")ist das Beste, aber Sie müssen hinzufügen setData(Uri.parse("mailto:")), um die besten Ergebnisse zu erzielen (nur E-Mail-Apps). Der vollständige Code lautet wie folgt:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:[email protected]"));
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"));
Rami Alloush
quelle
Perfekte Soultion
Daxesh Vekariya
2

Wenn Sie auf Google Mail abzielen möchten, können Sie Folgendes tun. Beachten Sie, dass die Absicht "ACTION_SENDTO" und nicht "ACTION_SEND" ist und die zusätzlichen Absichtsfelder für Google Mail nicht erforderlich sind.

String uriText =
    "mailto:[email protected]" + 
    "?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")); 
}
pcodex
quelle
2

Ich aktualisiere Adils Antwort in 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) { "[email protected]" })
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)
}
Kishan Solanki
quelle
Dies schlägt auch dann fehl, wenn sich Google Mail in der App befindet.
AndroidDev
@AndroidDev auf welchem ​​Gerät sind Sie mit dem Problem konfrontiert?
Kishan Solanki
2

Bitte verwenden Sie den folgenden Code:

                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();
                }
Tushar Bapte
quelle
1

Vielleicht sollten Sie dies versuchen: intent.setType("plain/text");

Ich habe es hier gefunden . Ich habe es in meiner App verwendet und es werden nur E-Mail- und Google Mail-Optionen angezeigt.

Sianis
quelle
2
"Klartext / Text" zeigt Bluetooth, Skype usw. an. Überprüfen Sie die gewünschte Ausgabe in der Android Market-App. Schritte sind in der Frage aufgeführt.
Dira
1
Die Verwendung des MIME-Typs zum Ausführen eines Sendevorgangs ist eine schlechte Idee, da Sie Android grundsätzlich anweisen, eine Liste von Apps bereitzustellen, die das Senden einer Datei vom Typ unterstützen plain/text, und die nicht einmal ein gültiger MIME-Typ ist. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Sie mailto:stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.
Paul Lammertsma
1

Verfassen Sie eine E-Mail im Telefon-E-Mail-Client:

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

quelle
1

Benutze das:

boolean success = EmailIntentBuilder.from(activity)
        .to("[email protected]")
        .cc("[email protected]")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

benutze Build Gradle:

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

Dies ist, was ich benutze, und es funktioniert für mich:

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

Auf diese Weise kann der Benutzer auch seine bevorzugte E-Mail-App auswählen. Das einzige, was Sie nicht tun können, ist die E-Mail-Adresse des Empfängers festzulegen.

Heuschrecke
quelle
Sie vermissen ein "in der 2. Zeile.
Tim
1

Dieser Code funktioniert auf meinem Gerät

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"[email protected]"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));
Mahen
quelle
Es öffnet nur Google Mail und E-Mail auf meinem Gerät
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();
}
Ahamadullah Saikat
quelle