Wie sende ich E-Mails von meiner Android-Anwendung?

Antworten:

978

Der beste (und einfachste) Weg ist die Verwendung eines Intent:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

Andernfalls müssen Sie Ihren eigenen Client schreiben.

Jeremy Logan
quelle
6
Im obigen Code gibt es keine Absender-E-Mail-ID. Wie wird die Nachricht dann gesendet?
KIRAN KJ
38
KIRAN: Sie müssen untersuchen, wie Absichten funktionieren, um dies zu verstehen. Grundsätzlich wird eine E-Mail-Anwendung geöffnet, in der Empfänger, Betreff und Text bereits ausgefüllt sind. Es liegt an der E-Mail-App, das Senden durchzuführen.
Jeremy Logan
8
Die E-Mail wird beim Starten der Aktivität nicht im Feld "TO" angezeigt. weiß jemand?
Hamza Waqas
11
Der große Beitrag dieses Kommentars ist: Nachricht / rfc822
Guilherme Oliveira
22
Fügen Sie diese hinzu, um sicherzustellen, dass die Auswahl nur E-Mail-Apps anzeigt: Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
Edris
194

Verwenden Sie .setType("message/rfc822")oder die Auswahl zeigt Ihnen alle (vielen) Anwendungen, die die Sendeabsicht unterstützen.

Jeff S.
quelle
5
Schön, das sollte mehr Stimmen haben. Sie werden keine Tests auf dem Emulator bemerken, aber wenn Sie "Text / Plain" auf einem realen Gerät senden, erhalten Sie eine Liste mit mehr als 15 Apps! Daher wird "message / rfc822" definitiv empfohlen (der E-Mail-Standard).
Blundell
7
@Blundell Hallo, aber ich habe keinen Unterschied gesehen, nachdem ich zumessage/rfc822
Draw
2
Können Sie Bluetooth aus der Liste entfernen? Dies zeigt sich auch bei diesem Typ. +1 aber, ordentlicher Trick!
Ingh.am
4
Hat unseren Speck gerettet. Ich kann mir nicht vorstellen, dem Kunden zu erklären, dass der Benutzer Supportanfragen twittern könnte, anstatt sie per E-Mail zu versenden.
Kevin Galligan
1
+1111111 Dies verdient endlose +1, damit andere dies sehen können. Ich habe diesen Teil verpasst und musste mich eine Weile mit diesem Problem befassen!
ChallengeAccepted
89

Ich benutze dies seit langer Zeit und es scheint gut, dass keine Nicht-E-Mail-Apps angezeigt werden. Nur eine andere Möglichkeit, eine E-Mail-Absicht zu senden:

Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:[email protected]")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);
Randy Sugianto 'Yuku'
quelle
1
Nicht unterstützte Aktion: Diese Aktion wird derzeit nicht unterstützt
erdomester
4
lgor G-> plz wechselt von setType "(plain / text") zu setType ("text / plain")
sachit
2
.setType ("message / rfc822") nicht text / plain
Der hungrige Androider
1
Dieser Code wird E-Mail-Absicht öffnen? Wie kann ich eine E-Mail senden, ohne dem Benutzer @yuku die Absicht zu zeigen? Ich möchte ein Passwort an die E-Mail senden
Erum
2
Diese Antwort ist ziemlich einflussreich . :)
Nick Volynkin
54

Ich habe etwas in Anlehnung an die aktuell akzeptierte Antwort verwendet, um E-Mails mit einer angehängten binären Fehlerprotokolldatei zu senden. GMail und K-9 senden es einwandfrei und es kommt auch einwandfrei auf meinem Mailserver an. Das einzige Problem war mein Mail-Client der Wahl Thunderbird, der Probleme beim Öffnen / Speichern der angehängten Protokolldatei hatte. Tatsächlich hat es die Datei einfach überhaupt nicht gespeichert, ohne sich zu beschweren.

Ich habe mir einen der Quellcodes dieser Mail angesehen und festgestellt, dass der Protokolldateianhang (verständlicherweise) den MIME-Typ hat message/rfc822. Natürlich ist dieser Anhang keine angehängte E-Mail. Aber Thunderbird kann diesen winzigen Fehler nicht anmutig bewältigen. Das war also eine Art Mist.

Nach ein wenig Recherche und Experimentieren habe ich die folgende Lösung gefunden:

public Intent createEmailOnlyChooserIntent(Intent source,
    CharSequence chooserTitle) {
    Stack<Intent> intents = new Stack<Intent>();
    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
            "[email protected]", null));
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(i, 0);

    for(ResolveInfo ri : activities) {
        Intent target = new Intent(source);
        target.setPackage(ri.activityInfo.packageName);
        intents.add(target);
    }

    if(!intents.isEmpty()) {
        Intent chooserIntent = Intent.createChooser(intents.remove(0),
                chooserTitle);
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                intents.toArray(new Parcelable[intents.size()]));

        return chooserIntent;
    } else {
        return Intent.createChooser(source, chooserTitle);
    }
}

Es kann wie folgt verwendet werden:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
    ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");

startActivity(createEmailOnlyChooserIntent(i, "Send via email"));

Wie Sie sehen können, kann die Methode createEmailOnlyChooserIntent problemlos mit der richtigen Absicht und dem richtigen MIME-Typ eingegeben werden.

Anschließend wird die Liste der verfügbaren Aktivitäten durchgearbeitet, die auf eine ACTION_SENDTO- mailtoProtokollabsicht reagieren (bei der es sich nur um E-Mail-Apps handelt), und eine Auswahl basierend auf dieser Liste von Aktivitäten und der ursprünglichen ACTION_SEND-Absicht mit dem richtigen MIME-Typ erstellt.

Ein weiterer Vorteil ist, dass Skype nicht mehr aufgeführt ist (was zufällig auf den MIME-Typ rfc822 reagiert).

Tiguchi
quelle
1
Ich habe gerade Ihr Code-Snippet eingefügt und es funktioniert gut. Bevor Apps wie Google Drive, Skype usw. aufgelistet wurden. Gibt es jedoch keine Möglichkeit, eine E-Mail aus der Anwendung zu senden, ohne eine andere Anwendung aufzurufen? Ich habe gerade den Artikel über den E-Mail-Client gelesen, den @Rene oben postet, aber er scheint zu kompliziert zu sein, um nur eine einfache E-Mail zu senden
Alex Cio
Hervorragende Antwort. Ich hatte auch Skype und Google Drive ACTION_SENDund das macht es wunderbar.
Darrenp
1
Die oben genannte beliebteste Lösung gibt auch Skype und Vkontakte zurück. Diese Lösung ist besser.
Denis Kutlubaev
Was ist CrashLogFile? Wo wurde es initialisiert? Bitte angeben
Noufal
@ Noufal Dies ist nur ein Rest meiner eigenen Codebasis. Es ist eine FileInstanz, die auf eine Absturzprotokolldatei verweist, die meine Android-Apps im Hintergrund erstellen, falls es eine nicht erfasste Ausnahme gab. Dieses Beispiel soll nur veranschaulichen, wie ein E-Mail-Anhang hinzugefügt wird. Sie können auch jede andere Datei aus dem externen Speicher anhängen (z. B. ein Image). Sie können diese Zeile auch mit entfernen, crashLogFileum ein funktionierendes Beispiel zu erhalten.
Tiguchi
37

Um E-Mail-Apps einfach zuzulassen , um Ihre Absicht zu lösen, müssen Sie ACTION_SENDTO als Aktion und mailto als Daten angeben.

private void sendEmail(){

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:" + "[email protected]")); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My email's subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "My email's body");

    try {
        startActivity(Intent.createChooser(emailIntent, "Send email using..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Activity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
    }

}
wildzic
quelle
23

Ich habe dieses Problem mit einfachen Codezeilen gelöst, wie in der Android-Dokumentation erläutert.

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

Das wichtigste ist die Flagge: es ist ACTION_SENDTOund nichtACTION_SEND

Die andere wichtige Linie ist

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

Übrigens, wenn Sie ein leeres senden Extra, if()funktioniert das am Ende nicht und die App startet den E-Mail-Client nicht.

Laut Android-Dokumentation. 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 mailto:Datenschema " " 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);
    }
}
Pedro Varela
quelle
21

Die Strategie, Apps zu verwenden .setType("message/rfc822")oder ACTION_SENDzu passen, die keine E-Mail-Clients sind, wie Android Beam und Bluetooth .

Die Verwendung von ACTION_SENDTOund eines mailto:URI scheint einwandfrei zu funktionieren und wird in der Entwicklerdokumentation empfohlen . Wenn Sie dies jedoch auf den offiziellen Emulatoren tun und keine E-Mail-Konten eingerichtet sind (oder keine E-Mail-Clients vorhanden sind), wird die folgende Fehlermeldung angezeigt:

Nicht unterstützte Aktion

Diese Aktion wird derzeit nicht unterstützt.

Wie nachfolgend dargestellt:

Nicht unterstützte Aktion: Diese Aktion wird derzeit nicht unterstützt.

Es stellt sich heraus, dass die Emulatoren die Absicht in eine aufgerufene Aktivität auflösen com.android.fallback.Fallback, die die obige Meldung anzeigt. Anscheinend ist dies beabsichtigt.

Wenn Sie möchten, dass Ihre App dies umgeht, damit es auch auf den offiziellen Emulatoren ordnungsgemäß 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 <[email protected]>" })
        .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 in der Entwicklerdokumentation .

Sam
quelle
13

Das Senden von E-Mails kann mit Absichten erfolgen, für die keine Konfiguration erforderlich ist. Dann ist jedoch eine Benutzerinteraktion erforderlich, und das Layout ist etwas eingeschränkt.

Um eine komplexere E-Mail ohne Benutzerinteraktion zu erstellen und zu senden, müssen Sie Ihren eigenen Client erstellen. Das erste ist, dass die Sun Java-API für E-Mails nicht verfügbar ist. Ich hatte Erfolg damit, die Apache Mime4j-Bibliothek zum Erstellen von E-Mails zu nutzen. Alles basierend auf den Dokumenten bei nilvec .

Rene
quelle
6

Hier ist der Beispielarbeitscode, der die E-Mail-Anwendung auf dem Android-Gerät öffnet und automatisch mit An Adresse und Betreff in der verfassten E-Mail gefüllt wird .

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:[email protected]"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
Sridhar Nalam
quelle
Vielen Dank. Im Vergleich zu einer Lösung von @Avi Parshan setzen Sie eine E-Mail ein setData()und Avi setzt ein putExtra(). Beide Varianten funktionieren. Aber wenn nur entfernen setDataund verwenden intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});, würde es eine geben ActivityNotFoundException.
CoolMind
5

Ich verwende den folgenden Code in meinen Apps. Dies zeigt genau E-Mail-Client-Apps wie Google Mail.

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

Dies zeigt Ihnen nur die E-Mail-Clients (sowie PayPal aus einem unbekannten Grund).

 public void composeEmail() {

    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, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    try {
        startActivity(Intent.createChooser(intent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
}
Avi Parshan
quelle
1
Schöne Lösung! Es werden viele ungeeignete Anwendungen vermieden (meistens als "Teilen" verwendet). Fügen Sie intent.type = "message/rfc822"; intent.type = "text/html";hier nicht hinzu , da dies zu Ausnahmen führen kann.
CoolMind
3

So habe ich es gemacht. Schön und einfach.

String emailUrl = "mailto:[email protected]?subject=Subject Text&body=Body Text";
        Intent request = new Intent(Intent.ACTION_VIEW);
        request.setData(Uri.parse(emailUrl));
        startActivity(request);
Hundeliebhaber
quelle
3

Diese Funktion leitet zuerst Absichts-Google Mail zum Senden von E-Mails. Wenn Google Mail nicht gefunden wird, fördern Sie die Absichtsauswahl. Ich habe diese Funktion in vielen kommerziellen Apps verwendet und sie funktioniert einwandfrei. Hoffe es wird dir helfen:

public static void sentEmail(Context mContext, String[] addresses, String subject, String body) {

    try {
        Intent sendIntentGmail = new Intent(Intent.ACTION_VIEW);
        sendIntentGmail.setType("plain/text");
        sendIntentGmail.setData(Uri.parse(TextUtils.join(",", addresses)));
        sendIntentGmail.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
        sendIntentGmail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentGmail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentGmail.putExtra(Intent.EXTRA_TEXT, body);
        mContext.startActivity(sendIntentGmail);
    } catch (Exception e) {
        //When Gmail App is not installed or disable
        Intent sendIntentIfGmailFail = new Intent(Intent.ACTION_SEND);
        sendIntentIfGmailFail.setType("*/*");
        sendIntentIfGmailFail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_TEXT, body);
        if (sendIntentIfGmailFail.resolveActivity(mContext.getPackageManager()) != null) {
            mContext.startActivity(sendIntentIfGmailFail);
        }
    }
}
Shohan Ahmed Sijan
quelle
1
Vielen Dank. Rette mein Leben
androCoder-BD
2

versuchen Sie es einfach

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonSend = (Button) findViewById(R.id.buttonSend);
    textTo = (EditText) findViewById(R.id.editTextTo);
    textSubject = (EditText) findViewById(R.id.editTextSubject);
    textMessage = (EditText) findViewById(R.id.editTextMessage);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String to = textTo.getText().toString();
            String subject = textSubject.getText().toString();
            String message = textMessage.getText().toString();

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
            // email.putExtra(Intent.EXTRA_CC, new String[]{ to});
            // email.putExtra(Intent.EXTRA_BCC, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));

        }
    });
}
NagarjunaReddy
quelle
3
Wie ist das besser als die Antworten, die es bereits gab, als Sie dies gepostet haben? Es sieht aus wie eine Kopie der akzeptierten Antwort, die in eine Aktivität eingeschlossen ist.
Sam
2

Andere Lösung kann sein

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("plain/text");
emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Yo");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi");
startActivity(emailIntent);

Angenommen, auf dem größten Teil des Android-Geräts ist die GMail-App bereits installiert.

Silentsudo
quelle
@ PedroVarela können wir immer überprüfen, Aktivität nicht Ausnahme gefunden.
Silentsudo
1
Ja wir können. Aber Ihre Lösung ist nicht die richtige. In der Android-Dokumentation wird klar angegeben, was Sie tun müssen, um nur E-Mail-Apps in der Absichtsauswahl anzuzeigen. Sie haben geschrieben "Angenommen, auf dem größten Teil des Android-Geräts ist die Google Mail-App bereits installiert"; Was ist, wenn es sich um ein gerootetes Gerät handelt und der Benutzer den Google Mail-Client löscht? Angenommen, Sie erstellen Ihre eigene E-Mail-App. Wenn ein Benutzer eine E-Mail senden möchte, wird Ihre App nicht in dieser Liste aufgeführt. Was passiert, wenn Google Mail den Paketnamen ändert? Wirst du deine App aktualisieren?
Pedro Varela
2

Verwenden Sie dies zum Senden von E-Mails ...

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
2

Ich habe diesen Code zum Senden von E-Mails verwendet, indem ich den Standardabschnitt zum Erstellen von E-Mail-Apps direkt gestartet habe.

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setType("message/rfc822"); 
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"[email protected]"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
Faris Muhammed
quelle
1

Diese Methode funktioniert bei mir. Es öffnet die Google Mail-App (falls installiert) und setzt mailto.

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
    activity.startActivity(emailIntent);
}
Psycho
quelle
1
/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}
Gal Rom
quelle
1
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","[email protected]", null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Forgot Password");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Write your Pubg user name or Phone Number");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));**strong text**
Tousif Akram
quelle
1

Versuche dies:

String mailto = "mailto:[email protected]" +
    "?cc=" + "[email protected]" +
    "&subject=" + Uri.encode(subject) +
    "&body=" + Uri.encode(bodyText);

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));

try {
    startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
    //TODO: Handle case where no email app is available
}

Der obige Code öffnet den bevorzugten E-Mail-Client des Benutzers, der mit der E-Mail gefüllt ist, die zum Senden bereit ist.

Quelle

Dan Bray
quelle