E-Mail-Absicht senden


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

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?


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



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


7
Können Sie bitte einen Code angeben, um die gewünschte Ausgabe zu erzielen?
Dira


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","abc@gmail.com", 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


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

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

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:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Kotlin-Version

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
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.


2
Für mich war es wichtig, dass zwischen mailtound der E-Mail kein Leerzeichen steht :mailto:abc@xyz.com
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[] { "me@somewhere.com" });
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.


35

Versuchen:

intent.setType("message/rfc822");

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[]{"youremailaddress@aviparshan.com"});

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


@ 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: somemail@xyz.com")
Hitesh Bisht

18

Endlich den besten Weg finden

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

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

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

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

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

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

7

Funktioniert auf allen Android-Versionen:

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

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

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

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


5

in Kotlin, wenn jemand sucht

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

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
}

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

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: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

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) { "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)
}

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

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.


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[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Benutze das:

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

benutze Build Gradle:

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

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.


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[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

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();
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.