Jak wysyłać e-maile z mojej aplikacji na Androida?

Odpowiedzi:

978

Najlepszym (i najłatwiejszym) sposobem jest użycie 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();
}

W przeciwnym razie będziesz musiał napisać własnego klienta.

Jeremy Logan
źródło
6
W powyższym kodzie nie ma identyfikatora e-mail nadawcy. W jaki sposób wiadomość zostanie wysłana?
KIRAN KJ
38
KIRAN: Musisz zrozumieć, jak działają intencje, aby to zrozumieć. Zasadniczo otworzy aplikację e-mail z odbiorcą, tematem i treścią już wypełnionymi. Wysyłanie wiadomości zależy od aplikacji e-mail.
Jeremy Logan,
8
Wiadomość e-mail nie pojawia się w polu „DO” po rozpoczęciu działania. ktokolwiek wie?
Hamza Waqas
11
wielki wkład tego komentarza to: wiadomość / rfc822
Guilherme Oliveira
22
dodaj te, aby mieć pewność, że selektor wyświetla tylko aplikacje e-mail: Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
Edris,
194

Użyj .setType("message/rfc822")lub selektor pokaże wszystkie (wiele) aplikacji, które obsługują zamiar wysyłania.

Jeff S.
źródło
5
Fajnie, to powinno mieć więcej głosów w górę. Nie zauważysz testowania na emulatorze, ale kiedy prześlesz „tekst / zwykły” na prawdziwym urządzeniu, otrzymasz listę ponad 15 aplikacji !! więc zdecydowanie zaleca się „wiadomość / rfc822” (standard e-mail).
Blundell,
7
@Blundell cześć, ale nie zauważyłem żadnej różnicy po zmianie namessage/rfc822
zremisowałem
2
Czy możesz usunąć bluetooth z listy? To również pojawia się w przypadku tego typu. +1 jednak, fajna sztuczka!
ingh.am
4
Uratowałem nasz bekon. Nie wyobrażam sobie, by wyjaśniać klientowi, że użytkownik może tweetować żądania pomocy technicznej zamiast wysyłać je pocztą elektroniczną.
Kevin Galligan
1
+1111111 Zasługuje na nieskończone +1, aby inni mogli to zobaczyć. Brakowało mi tej części i przez jakiś czas musiałem sobie z tym poradzić!
Wyzwanie
89

Używam tego od dawna i wydaje się to dobre, nie pojawiają się żadne aplikacje inne niż e-mail. Kolejny sposób wysłania zamiaru wysłania e-maila:

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”
źródło
1
Nieobsługiwana akcja: ta akcja nie jest obecnie obsługiwana
erdomester
4
lgor G-> plz zmiana z setType „(zwykły / tekst”) na setType („tekst / zwykły”)
sachit
2
.setType („message / rfc822”) nie tekstowy / zwykły
The Hungry Androider
1
ten kod otworzy zamiar e-mail? w jaki sposób mogę wysłać wiadomość e-mail, nie pokazując zamiaru użytkownikowi @yuku Chcę wysłać hasło na adres e
Erum
2
Ta odpowiedź jest dość wpływowa . :)
Nick Volynkin
54

Użyłem czegoś podobnego do obecnie akceptowanej odpowiedzi, aby wysłać e-maile z dołączonym plikiem dziennika błędów binarnych. GMail i K-9 wysyłają to dobrze, a także trafia dobrze na mój serwer pocztowy. Jedynym problemem był mój klient poczty Thunderbird, który miał problemy z otwieraniem / zapisywaniem załączonego pliku dziennika. W rzeczywistości po prostu nie zapisał pliku bez narzekań.

Spojrzałem na jeden z tych kodów źródłowych poczty i zauważyłem, że załącznik pliku dziennika ma (co zrozumiałe) typ MIME message/rfc822. Oczywiście ten załącznik nie jest załączonym adresem e-mail. Ale Thunderbird nie potrafi z wdziękiem poradzić sobie z tym drobnym błędem. To było trochę kłopotliwe.

Po kilku badaniach i eksperymentach wymyśliłem następujące rozwiązanie:

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

Można go używać w następujący sposób:

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

Jak widać, metodę createEmailOnlyChooserIntent można łatwo podać z prawidłową intencją i odpowiednim typem MIME.

Następnie przechodzi przez listę dostępnych działań, które odpowiadają celom mailtoprotokołu ACTION_SENDTO (które są tylko aplikacjami e-mail) i konstruuje selektor na podstawie tej listy działań i pierwotnego celu ACTION_SEND z odpowiednim typem MIME.

Kolejną zaletą jest to, że Skype nie jest już wymieniony na liście (co dzieje się w odpowiedzi na typ MIME rfc822).

tiguchi
źródło
1
właśnie wstawiłem fragment kodu i działa dobrze. Zanim pojawiły się na liście aplikacje, takie jak Dysk Google, Skype itp. Ale czy nie ma sposobu, aby wysłać pocztę z aplikacji bez wywoływania innej aplikacji? Właśnie przeczytałem artykuł o kliencie e-mail, który post @Rene powyżej, ale wydaje się być zbyt skomplikowany, aby wysłać zwykłą wiadomość e
Alex Cio
Doskonała odpowiedź. Wymyśliłem też Skype'a i Dysk Google, ACTION_SENDco pięknie to rozwiązuje.
darrenp
1
Najpopularniejsze powyższe rozwiązanie zwraca również Skype i Vkontakte. To rozwiązanie jest lepsze.
Denis Kutlubaev
co to jest crashLogFile? gdzie się zainicjował? pease sepecify
Noufal
@Noufal To tylko część z mojej własnej bazy kodu. Jest to Fileinstancja wskazująca na plik dziennika awarii, który moje aplikacje na Androida tworzą w tle na wypadek, gdyby wystąpił wyjątek. Ten przykład powinien tylko zilustrować sposób dodawania załącznika e-mail. Możesz także dołączyć dowolny inny plik z pamięci zewnętrznej (na przykład obraz). Możesz również usunąć tę linię za pomocą crashLogFile, aby uzyskać działający przykład.
tiguchi
37

Do PO PROSTU POZWALIĆ APLIKACJOM E-MAIL, aby rozwiązać Twój zamiar, musisz określić ACTION_SENDTO jako Działanie i mailto jako Dane.

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
źródło
23

Rozwiązałem ten problem za pomocą prostych wierszy kodu, jak wyjaśnia dokumentacja Androida.

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

Najważniejsza jest flaga: jest ACTION_SENDTOi nie jestACTION_SEND

Drugą ważną linią jest

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

Nawiasem mówiąc, jeśli wyślesz pusty Extra,if() na końcu nie będzie działać, a aplikacja nie uruchomi klienta poczty e-mail.

Według dokumentacji Androida. Jeśli chcesz mieć pewność, że twoje zamiary są obsługiwane tylko przez aplikację e-mail (a nie inne wiadomości tekstowe lub aplikacje społecznościowe), użyj ACTION_SENDTOakcji i dołącz mailto:schemat danych. Na przykład:

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
źródło
21

Strategia używania .setType("message/rfc822")lub ACTION_SENDwydaje się pasować również do aplikacji, które nie są klientami poczty e-mail, takich jak Android Beam i Bluetooth .

Użycie ACTION_SENDTOi mailto:identyfikator URI wydaje się działać idealnie i jest zalecane w dokumentacji dla programistów . Jeśli jednak zrobisz to na oficjalnych emulatorach i nie ma żadnych skonfigurowanych kont e-mail (lub nie ma żadnych klientów poczty), pojawi się następujący błąd:

Nieobsługiwane działanie

Ta akcja nie jest obecnie obsługiwana.

Jak pokazano niżej:

Nieobsługiwana akcja: ta akcja nie jest obecnie obsługiwana.

Okazuje się, że emulatory rozwiązują zamiar wywołanej czynności com.android.fallback.Fallback, która wyświetla powyższy komunikat. Najwyraźniej jest to zgodne z projektem.

Jeśli chcesz, aby Twoja aplikacja to obchodziła, aby działała poprawnie również w oficjalnych emulatorach, możesz to sprawdzić przed próbą wysłania wiadomości e-mail:

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

Znajdź więcej informacji w dokumentacji dla programistów .

Sam
źródło
13

Wysyłanie wiadomości e-mail może odbywać się przy użyciu zamiarów, które nie wymagają konfiguracji. Ale wtedy będzie to wymagało interakcji użytkownika, a układ będzie nieco ograniczony.

Budowanie i wysyłanie bardziej złożonych wiadomości e-mail bez interakcji użytkownika wiąże się z budowaniem własnego klienta. Pierwszą rzeczą jest to, że Sun Java API dla poczty e-mail jest niedostępny. Odniosłem sukces wykorzystując bibliotekę Apache Mime4j do tworzenia wiadomości e-mail. Wszystko oparte na dokumentacji w Nilvec .

Rene
źródło
6

Oto przykładowy działający kod, który otwiera aplikację pocztową na urządzeniu z Androidem i automatycznie wypełnia adres Do oraz Temat w tworzonej wiadomości.

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
źródło
Dzięki. Porównując z rozwiązaniem @Avi Parshan, ustawiasz wiadomość e-mail setData(), a Avi włącza się putExtra(). Oba warianty działają. Ale jeśli usuniesz setDatai użyjesz tylko intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});, będzie ActivityNotFoundException.
CoolMind 16.04.18
5

Używam poniższy kod w moich aplikacjach. To pokazuje dokładnie aplikacje klienckie, takie jak 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)));
Łomża
źródło
5

Spowoduje to wyświetlenie tylko klientów poczty e-mail (a także PayPal z nieznanego powodu)

 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
źródło
1
Fajne rozwiązanie! Pozwala to uniknąć wielu nieodpowiednich aplikacji (najczęściej używanych jako „Udostępnij”). Nie dodawaj intent.type = "message/rfc822"; intent.type = "text/html";tutaj, ponieważ spowoduje to wyjątek.
CoolMind,
3

Tak to zrobiłem. Ładne i proste.

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);
Miłośnik psów
źródło
3

Ta funkcja jest pierwszym bezpośrednim zamiarem Gmaila do wysyłania wiadomości e-mail, jeśli Gmail nie zostanie znaleziony, promuj wybór zamiaru. Użyłem tej funkcji w wielu aplikacjach komercyjnych i działa dobrze. Mam nadzieję, że pomoże ci to:

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
źródło
1
Wielkie dzięki. Ocal moje życie
androCoder-BD
2

po prostu spróbuj tego

 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
źródło
3
Jak to może być lepsze niż odpowiedzi, które już istniały, kiedy to opublikowałeś? Wygląda jak kopia zaakceptowanej odpowiedzi zawinięta w działanie.
Sam
2

Innym rozwiązaniem może być

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

Zakładając, że większość urządzeń z Androidem ma już zainstalowaną aplikację GMail.

silentsudo
źródło
@PedroVarela zawsze możemy sprawdzić aktywność, nie znaleziono wyjątku.
silentsudo
1
Tak możemy. Ale twoje rozwiązanie nie jest właściwe. Dokumentacja Androida jasno określa, co musisz zrobić, aby wyświetlić tylko aplikacje pocztowe w wybranym narzędziu. Napisałeś „Zakładając, że większość urządzeń z Androidem ma już zainstalowaną aplikację Gmail”; Co jeśli jest to zrootowane urządzenie, a użytkownik usuwa klienta Gmaila ?. Załóżmy, że tworzysz własną aplikację e-mail ?, jeśli użytkownik zamierza wysłać wiadomość e-mail, aplikacji nie będzie na tej liście. Co się stanie, jeśli Gmail zmieni nazwę pakietu? Czy zamierzasz zaktualizować swoją aplikację?
Pedro Varela
2

Użyj tego do wysłania e-maila ...

boolean success = EmailIntentBuilder.from(activity)
    .to("[email protected]")
    .cc("[email protected]")
    .subject("Error report")
    .body(buildErrorReport())
    .start();

użyj stopnia kompilacji:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'
Manish
źródło
2

Użyłem tego kodu, aby wysłać pocztę, bezpośrednio uruchamiając domyślną sekcję tworzenia aplikacji poczty.

    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
źródło
1

Ta metoda działa dla mnie. Otwiera aplikację Gmail (jeśli jest zainstalowana) i ustawia 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
źródło
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
źródło
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
źródło
1

Spróbuj tego:

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
}

Powyższy kod otworzy ulubionego klienta poczty e-mail wypełnionego e-mailem gotowym do wysłania.

Źródło

Dan Bray
źródło