683 Stimmen

Intention zum Senden einer E-Mail

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 ein Dialogfeld mit den folgenden Anwendungen: Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype usw.

Eigentlich möchte ich diese Listenoptionen filtern. Ich möchte nur E-Mail-bezogene Anwendungen anzeigen, z. B. Gmail und Yahoo Mail. Wie kann ich das tun?

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

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

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

984voto

thanhbinh84 Punkte 16430

UPDATE

Offizieller Ansatz:

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

Link

ALTE ANTWORT

Die akzeptierte Antwort funktioniert nicht auf dem 4.1.2. 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..."));

Aktualisierung: Nach Angaben von marcwjj Es scheint, dass wir unter 4.3 ein String-Array statt eines Strings für die E-Mail-Adresse übergeben müssen, damit es funktioniert. Möglicherweise müssen wir eine weitere Zeile hinzufügen:

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

282voto

dira Punkte 29588

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. Verwendung von Intent Extras:

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. Bibliothek unterstützen 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();

236voto

Padma Kumar Punkte 20700

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

intent.setType("text/plain");

Utilice android.content.Intent.ACTION_SENDTO um nur die Liste der E-Mail-Clients zu erhalten, ohne Facebook oder andere Anwendungen. Nur die E-Mail-Clients. Beispiel:

new Intent(Intent.ACTION_SENDTO);

Ich würde Ihnen nicht empfehlen, direkt zur E-Mail-App zu gehen. Lassen Sie den Benutzer seine bevorzugte E-Mail-Anwendung wählen. Schränken Sie ihn nicht ein.

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

EDIT。 Wir können verwenden message/rfc822 anstelle von "text/plain" als MIME-Typ. Das bedeutet jedoch nicht, dass nur E-Mail-Clients angeboten werden sollen, sondern dass alles angeboten werden soll, was message/rfc822-Daten unterstützt. Das könnte ohne weiteres einige Anwendungen umfassen, die keine E-Mail-Clients sind.

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

120voto

marcwjj Punkte 1695

Dies ist ein Zitat aus dem offiziellen Android-Dokument, ich habe es auf Android 4.4 getestet und es funktioniert perfekt. Mehr 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);
    }
}

110voto

capt.swag Punkte 9734

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 Gmail + Posteingang vorgeschlagen):

my output

Ich habe diese Lösung von der Android-Entwickler Standort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X