555 Stimmen

Wie versende ich E-Mails aus meiner Android-Anwendung?

Ich entwickle eine Anwendung in Android. Ich weiß nicht, wie ich eine E-Mail aus der Anwendung heraus senden kann?

29voto

Pedro Varela Punkte 2218

Die Lösung für dieses Problem ist einfach: Die Android-Dokumentation erklärt es.

( https://developer.Android.com/guide/components/intents-common.html#Email )

Das Wichtigste ist die Flagge: Sie ist ACTION_SENDTO und nicht ACTION_SEND

Die andere wichtige Zeile lautet

intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***

Übrigens, wenn Sie eine leere Extra die if() am Ende funktioniert nicht und die App startet den E-Mail-Client nicht.

Gemäß der Android-Dokumentation. Wenn Sie sicherstellen möchten, dass Ihre Absicht nur von einer E-Mail-App (und nicht von anderen Textnachrichten- oder sozialen Apps) behandelt wird, dann verwenden Sie die ACTION_SENDTO Aktion und fügen Sie die " mailto: Datenschema". 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);
    }
}

23voto

Sam Punkte 37787

Die Strategie der Nutzung .setType("message/rfc822") o ACTION_SEND scheint auch zu Anwendungen zu passen, die keine E-Mail-Clients sind, wie z. B. Android Beam y Bluetooth .

Verwendung von ACTION_SENDTO und eine mailto: URI scheint perfekt zu funktionieren, und wird in der Entwicklerdokumentation empfohlen . Wenn Sie dies jedoch auf den offiziellen Emulatoren tun und es sind keine E-Mail-Konten eingerichtet (oder es gibt keine E-Mail-Clients), erhalten Sie folgende Fehlermeldung:

Nicht unterstützte Aktion

Diese Aktion wird derzeit nicht unterstützt.

Wie unten dargestellt:

Unsupported action: That action is not currently supported.

Es stellt sich heraus, dass die Emulatoren die Absicht in eine Aktivität namens com.android.fallback.Fallback der die obige Meldung anzeigt. Offenbar ist dies beabsichtigt.

Wenn Sie möchten, dass Ihre Anwendung dies umgeht, damit sie auch auf den offiziellen Emulatoren korrekt funktioniert, können Sie dies überprüfen, bevor Sie versuchen, die E-Mail zu senden:

private void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO)
        .setData(new Uri.Builder().scheme("mailto").build())
        .putExtra(Intent.EXTRA_EMAIL, new String[]{ "John Smith <johnsmith@yourdomain.com>" })
        .putExtra(Intent.EXTRA_SUBJECT, "Email subject")
        .putExtra(Intent.EXTRA_TEXT, "Email body")
    ;

    ComponentName emailApp = intent.resolveActivity(getPackageManager());
    ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
    if (emailApp != null && !emailApp.equals(unsupportedAction))
        try {
            // Needed to customise the chooser dialog title since it might default to "Share with"
            // Note that the chooser will still be skipped if only one app is matched
            Intent chooser = Intent.createChooser(intent, "Send email with");
            startActivity(chooser);
            return;
        }
        catch (ActivityNotFoundException ignored) {
        }

    Toast
        .makeText(this, "Couldn't find an email app and account", Toast.LENGTH_LONG)
        .show();
}

Weitere Informationen finden Sie unter die Entwicklerdokumentation .

13voto

Rene Punkte 4002

Der Versand von E-Mails kann mit Intents erfolgen, die keine Konfiguration erfordern. Allerdings ist dann eine Benutzerinteraktion erforderlich und das Layout ist etwas eingeschränkt.

Das Erstellen und Versenden einer komplexeren E-Mail ohne Benutzerinteraktion erfordert den Aufbau eines eigenen Clients. Das erste Problem ist, dass die Sun Java API für E-Mail nicht verfügbar ist. Ich hatte Erfolg damit, die Apache Mime4j-Bibliothek für die Erstellung von E-Mails zu nutzen. Alles basierend auf den Dokumenten unter nilvec .

7voto

Sridhar Nalam Punkte 509

Hier ist ein Beispiel für einen Arbeitscode, der Folgendes öffnet Mail-Anwendung im Android-Gerät und automatisch ausgefüllt mit Ansprechen y Thema bei der Erstellung der Mail.

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:feedback@gmail.com"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

5voto

lomza Punkte 8884

Ich verwende den folgenden Code in meinen Anwendungen. Dies zeigt genau E-Mail-Client-Anwendungen, wie Gmail.

    Intent contactIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_to), null));
    contactIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    startActivity(Intent.createChooser(contactIntent, getString(R.string.email_chooser)));

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