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?

16voto

Addev Punkte 30523

Wenn Sie nur die E-Mail-Clients wollen, die Sie verwenden sollten android.content.Intent.EXTRA_EMAIL mit einem Array. Hier ist 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);

11voto

Anam Ansari Punkte 849

Der folgende Code funktioniert bei mir einwandfrei.

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

10voto

minipif Punkte 4586

Bearbeiten: Funktioniert nicht mehr mit neuen Versionen von Gmail

Das war die einzige Möglichkeit, die ich damals gefunden habe, um es mit allen Zeichen zum Laufen zu bringen.

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

Alte Antwort:


Hier ist meine. Es scheint auf allen Android-Versionen zu funktionieren, mit Unterstützung für Betreff und Nachrichtentext und voller utf-8-Zeichen-Unterstützung:

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

9voto

marvatron Punkte 301

En Dokumente für Android-Entwickler :

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

9voto

scottt Punkte 8141

Keine dieser Lösungen hat bei mir funktioniert. Hier ist eine minimale Lösung, die auf Lollipop funktioniert. Auf meinem Gerät werden nur Gmail 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..."));

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