Wyślij zamiar e-mail


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

Powyższy kod otwiera okno dialogowe z następującymi aplikacjami: - Bluetooth, Dokumenty Google, Yahoo Mail, Gmail, Orkut, Skype itp.

Właściwie chcę filtrować te opcje list. Chcę wyświetlać tylko aplikacje związane z pocztą e-mail, np. Gmail, Yahoo Mail. Jak to zrobić?

Widziałem taki przykład w aplikacji „Android Market”.

  1. Otwórz aplikację Android Market
  2. Otwórz dowolną aplikację, w której programista podał swój adres e-mail. (Jeśli nie możesz znaleźć takiej aplikacji, po prostu otwórz ją: - market: // details? Id = com.becomputer06.vehicle.diary.free LUB wyszukaj według „Vehicle Diary”)
  3. Przewiń w dół do „DEVELOPER”
  4. Kliknij „Wyślij e-mail”

Okno dialogowe pokazuje tylko aplikacje e-mail, np. Gmail, Yahoo Mail itp. Nie wyświetla Bluetooth, Orkut itp. Jaki kod powoduje takie okno dialogowe?


4
Przepraszamy, nie jest to możliwe dzięki Intent.ACTION_SEND. Może działa z zamiarem bezpośrednio do aplikacji Gmail, ale nie wiem, czy jest to możliwe.
Thommy,

19
Jeśli ktoś się tutaj dowie o intencjach e-mail, EXTRA_MAIL powinien odpowiadać String[]nie tylko Stringpokazanemu tutaj.
bigstones



Zobacz tutaj kilka dobrych rad: medium.com/@cketti/…
Felix D.

Odpowiedzi:


218

kiedy zmienisz swój intent.setType jak poniżej, otrzymasz

intent.setType("text/plain");

Służy android.content.Intent.ACTION_SENDTOdo pobierania tylko listy klientów e-mail, bez Facebooka i innych aplikacji. Tylko klienci poczty e-mail. Dawny:

new Intent(Intent.ACTION_SENDTO);

Nie sugeruję przejścia bezpośrednio do aplikacji e-mail. Pozwól użytkownikowi wybrać swoją ulubioną aplikację e-mail. Nie ograniczaj go.

Jeśli używasz ACTION_SENDTO, putExtra nie działa, aby dodać temat i tekst do intencji. Użyj Uri, aby dodać temat i treść.

EDYCJA: Możemy użyć message/rfc822zamiast "text/plain"jako typu MIME. Nie oznacza to jednak „oferuj tylko klientów e-mail” - oznacza to „oferuj wszystko, co obsługuje dane typu wiadomość / rfc822”. Może to z łatwością obejmować niektóre aplikacje, które nie są klientami poczty e-mail.

message/rfc822 obsługuje typy MIME .mhtml, .mht, .mime


7
Czy możesz podać kod, aby uzyskać pożądany wynik?
dira


76
Wybieracz zamiarów mówi, no apps installed to perform this intentkiedy używam ACTION_SENDTO. Używam Androida 4.1.2 i mam zainstalowaną aplikację e-mail ...
ffleandro,

4
„Właściwy” sposób to odpowiedź Magnusa. Polecam oryginalny plakat, aby zmienić przyjętą odpowiedź.
jhabbott

8
Użycie typu MIME do wykonania operacji wysyłania jest złym pomysłem, ponieważ zasadniczo instruujesz Androida, aby udostępniał listę aplikacji obsługujących wysyłanie pliku typu message/rfc822. To nie to samo, co wysyłanie wiadomości e-mail. mailto:Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.
Paul Lammertsma

872

Akceptowana odpowiedź nie działa w 4.1.2. Powinno to działać na wszystkich platformach:

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

Mam nadzieję że to pomoże.

Aktualizacja: Według marcwjj wydaje się, że w wersji 4.3 musimy przekazać tablicę ciągów zamiast ciągu dla adresu e-mail, aby działał. Może być konieczne dodanie jeszcze jednej linii:

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

Link referencyjny


7
Masz rację i nie dotyczy to także wersji 4.2. To właściwie jedyna poprawna odpowiedź, dzięki!
mDroidd

12
To jest doskonałe. Ktoś poniżej wspomniał, że określenie części „mailto” zawęża dostępne opcje dla klientów poczty e-mail. Użycie Uri.fromParts („mailto”, „”, null) umieści kursor w polu odbiorcy - idealne do tego, czego potrzebowałem.
Shaggy

24
Spróbuj tego emailIntent.putExtra (Intent.EXTRA_TEXT, „Jestem treścią e-maila”);
thanhbinh84

15
Jeśli nie masz konkretnego odbiorcy, działa to również:Uri.fromParts("mailto", "", null)
Phil

25
To już nie działa na moim Androidzie 4.3. Sprawdź oficjalny dokument Androida na temat wysyłania wiadomości e-mail zgodnie z intencją, co działa doskonale: developer.android.com/guide/components/…
marcwjj

244

Istnieją trzy główne podejścia:

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. Niestandardowe 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. Korzystanie z Intentdodatków:

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. Biblioteka wsparcia 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();

1
Działa to dla mnie znacznie lepiej - inne opcje wyskoczyły z prostymi rzeczami (na przykład Skype) jako możliwymi programami obsługi.
Chris Rae,

1
Jeśli masz %symbol w buforze, niektóre znaki w wynikowej wiadomości e-mail nie zostaną poprawnie zakodowane. Musisz wykonać Uri.encodetaniec sugerowany przez @minipif.
Giulio Piancastelli,

12
To są najlepsze odpowiedzi tutaj, nie marnuj czasu na próby innych, drugi tutaj jest tym, co wybrałem i działa idealnie, pokazuje tylko aplikacje e-mail, nie gDrive, nie bluetooth .. itp. Dzięki @ becomputer06
Hugo

1
Uważaj na znak „&”. Jeśli masz znak & w treści wiadomości e-mail, ta metoda odetnie treść po &. Na przykład, jeśli wyślesz ciało w stylu „Jestem i próbka”, otrzymasz tylko „Jestem”
Emre Koç

4
ShareCompat zapewnia prawie wszystkie aplikacje, nie tylko klientów e-mail!
rpattabi

111

Jest to cytowany z oficjalnego dokumentu Androida, przetestowałem go na Androidzie 4.4 i działa idealnie. Zobacz więcej przykładów na 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);
    }
}

6
Zgoda! Dziwię się, że taka odpowiedź jest tak daleko na liście. Myślę, że musiała to być stosunkowo nowa zmiana w Dokumentach na Androida.
Mikey

Świetny! niezawodny, odniósł się do „Biblii” twórców aplikacji na Androida.
dev_android

1
Dwukropek po mailto załatwił sprawę! Użyłem „mailto” zamiast „mailto:”
Nigel Crasto

1
Praca nad 5.1.1. Inne opcje nie działają dla mnie.
Juanin

1
EXTRA_EMAILnie działa dla mnie, więc użyłemUri.parse("mailto: " + myEmail)
Pratik Butani

89

Późna odpowiedź, choć wymyśliłem rozwiązanie, które może pomóc innym:

Wersja Java

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Wersja Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


To był mój wynik (sugerowany tylko Gmail + Skrzynka odbiorcza):

moja wydajność

Mam to rozwiązanie z witryny dla programistów Androida .


2
Dla mnie ważne było, aby pomiędzy mailtoe-mailem nie było spacji :mailto:abc@xyz.com
AlvaroSantisteban

To jest poprawna odpowiedź.
nibbana

36

To działa dla mnie:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] { "me@somewhere.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");

startActivity(Intent.createChooser(intent, "Email via..."));

tzn. użyj ACTION_SENDTOakcji zamiast ACTION_SENDakcji. Wypróbowałem to na kilku urządzeniach z Androidem 4.4 i ogranicza wyskakujące okno wyboru tylko do wyświetlania aplikacji e-mail (E-mail, Gmail, Yahoo Mail itp.) I poprawnie wstawia adres e-mail i temat wiadomości e-mail.


35

Próbować:

intent.setType("message/rfc822");

Ma rację, próbowałem i oferuje [Dysk, e-mail, Gmail, Skype], to powinna być „
właściwa

18
Użycie typu MIME do wykonania operacji wysyłania jest złym pomysłem, ponieważ zasadniczo instruujesz Androida, aby udostępniał listę aplikacji obsługujących wysyłanie pliku typu message/rfc822. To nie to samo, co wysyłanie wiadomości e-mail. mailto:Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.
Paul Lammertsma

34

Jest to właściwy sposób wysłania wiadomości e-mail zgodnie z oficjalną dokumentacją programisty Androida

Dodaj następujące wiersze kodu do swojej aplikacji:

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

Opcjonalnie: dodaj treść i temat, w ten sposób

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

Ten wiersz już został dodany, ale warto go mieć dla nowych użytkowników

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

Będzie to adres odbiorcy, co oznacza, że ​​użytkownik wyśle ​​do ciebie (programistę) wiadomość e-mail.


@ barnacle.m Dziękujemy! Jest to również jedna z prostszych metod. Problem polega na tym, że moja odpowiedź nie ma wystarczającej liczby głosów pozytywnych :(
Avi Parshan

1
Jest tak, ponieważ istnieje wiele podobnych odpowiedzi, ale ta wskazuje na oficjalną dokumentację Androida w tej sprawie.
barnacle.m

1
Nie mogłem wysłać adresu e-mail. Naprawiłem to tak: intent.data = Uri.parse („mailto: somemail@xyz.com”)
Hitesh Bisht

18

Wreszcie wymyśl najlepszy sposób na zrobienie tego

String to = "test@gmail.com";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
        "?&subject=" + Uri.encode(subject) +
        "&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);

Jesteś niesamowity, stary.
Ashik

Żaden problem, koleś
Ajay Shrestha

2
Działa świetnie.
Solanki Kamlesh

Sprawdź ten artykuł, który szczegółowo go opisuje: medium.com/@cketti/…
Bruno Bieri,

działa dobrze, tak trzymaj
Jacks

15

Jeśli chcesz tylko klientów e-mail, których powinieneś używać android.content.Intent.EXTRA_EMAILz tablicą. Oto przykład:

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

3
Nie, wciąż przywołuje wiele innych aplikacji - o wiele więcej niżACTION_SENDTO
Dori

10

Poniższy kod działa dla mnie dobrze.

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

8

Z dokumentów programistów Androida :

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

8

Edycja: nie działa już z nowymi wersjami Gmaila

To był jedyny sposób, w jaki znalazłem w tym czasie, aby działał z dowolnymi postaciami.

Odpowiedź doreamon jest teraz właściwą drogą, ponieważ działa ze wszystkimi postaciami w nowych wersjach Gmaila.

Stara odpowiedź:


Tutaj jest moje. Wygląda na to, że działa na wszystkich wersjach Androida, z obsługą tematu i treści wiadomości oraz pełną obsługą znaków utf-8:

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

1
+1 Uri.encodeto właściwa droga. Ale po co nazywać to dwa razy dla przedmiotu i ciała?
Giulio Piancastelli

Samo kodowanie to po prostu zły pomysł. Lepiej używaj właściwej intencji z niezbędnymi dodatkami, patrz np. Stackoverflow.com/a/15022222
Giulio Piancastelli

Dla mnie to najlepsza odpowiedź, ponieważ inne rozwiązania działają poprawnie tylko z niektórymi aplikacjami e-mail. Ten działa z każdą przetestowaną aplikacją e-mail.
Egis,

7

Żadne z tych rozwiązań nie działało dla mnie. Oto minimalne rozwiązanie, które działa na Lollipop. Na moim urządzeniu tylko Gmail i natywne aplikacje e-mail pojawiają się na wynikowej liście wyboru.

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

7

Działa na wszystkich wersjach Androida:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .buildUpon()
            .appendQueryParameter("subject", "subject")
            .appendQueryParameter("body", "body")
            .build();
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Twoja odpowiedź pomogła mi. Dzięki
Adnan Khan

5

Poniższy kod działał dla mnie !!

import android.support.v4.app.ShareCompat;
    .
    .
    .
    .
final Intent intent = ShareCompat.IntentBuilder
                        .from(activity)
                        .setType("application/txt")
                        .setSubject(subject)
                        .setText("Hii")
                        .setChooserTitle("Select One")
                        .createChooserIntent()
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
                        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

activity.startActivity(intent);

5

Działa to dla mnie idealnie:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));

5

Jeśli chcesz upewnić się, ż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 schemat danych „mailto:”. 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);
    }
}

Znalazłem to w https://developer.android.com/guide/components/intents-common.html#Email


5

w Kotlinie, jeśli ktoś szuka

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

4

Większość tych odpowiedzi działa tylko w prostym przypadku, gdy nie wysyłasz załącznika . W moim przypadku czasami muszę wysłać załącznik (ACTION_SEND) lub dwa załączniki (ACTION_SEND_MULTIPLE).

Więc wziąłem najlepsze podejścia z tego wątku i połączyłem je. Korzysta z biblioteki wsparcia, ShareCompat.IntentBuilderale pokazuję tylko aplikacje, które pasują do ACTION_SENDTO z „mailto:” uri. W ten sposób otrzymuję tylko listę aplikacji e-mail z obsługą załączników:

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}

To wygląda na przydatne; masz szansę na zdobycie go w Javie?
Kyle Humfeld

1
Kotlin jest bardzo podobny do Javy, powinieneś być w stanie skopiować i wkleić kilka rzeczy.
David Vávra,

3

Korzystanie intent.setType("message/rfc822");działa, ale pokazuje dodatkowe aplikacje, które niekoniecznie obsługują wiadomości e-mail (np. GDrive). Używanie Intent.ACTION_SENDTOz setType("text/plain")jest najlepsze, ale musisz dodać, setData(Uri.parse("mailto:"))aby uzyskać najlepsze wyniki (tylko aplikacje e-mail). Pełny kod wygląda następująco:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));

Idealne soultion
Daxesh Vekariya

2

Jeśli chcesz kierować reklamy na Gmaila, możesz wykonać następujące czynności. Pamiętaj, że zamiarem jest „ACTION_SENDTO”, a nie „ACTION_SEND”, a dodatkowe pola zamiaru nie są konieczne dla Gmaila.

String uriText =
    "mailto:youremail@gmail.com" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}

2

Aktualizuję odpowiedź Adila w Kotlinie,

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "test@email.com" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}

To się nie udaje, nawet gdy Gmail jest w aplikacji.
AndroidDev,

@AndroidDev na jakim urządzeniu napotykasz problem?
Kishan Solanki

2

Proszę użyć poniższego kodu:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }

1

Może powinieneś spróbować: intent.setType("plain/text");

Znalazłem to tutaj . Użyłem go w mojej aplikacji i pokazuje tylko opcje e-mail i Gmail.


2
„zwykły / tekstowy” pokazuje Bluetooth, Skype itp. Sprawdź pożądane dane wyjściowe w aplikacji Android Market. Kroki są wymienione w pytaniu.
dira

1
Użycie typu MIME do wykonania operacji wysyłania jest złym pomysłem, ponieważ zasadniczo instruujesz Androida, aby udostępniał listę aplikacji obsługujących wysyłanie pliku typu plain/text, a to nawet nie jest prawidłowy typ MIME. To nie to samo, co wysyłanie wiadomości e-mail. mailto:Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.
Paul Lammertsma

1

Utwórz wiadomość e-mail w klienckim telefonie e-mail:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Użyj tego:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

użyj stopnia kompilacji:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'

1

Oto, czego używam i działa dla mnie:

//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";

//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);

startActivity(variableName);

Pozwoli to również użytkownikowi wybrać preferowaną aplikację e-mail. Jedyne, czego na to nie pozwala, to ustawienie adresu e-mail odbiorcy.


Brakuje a "w 2. linii.
Tim

1

Ten kod działa na moim urządzeniu

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

otwiera tylko Gmaila i pocztę e-mail na moim urządzeniu
Mahen

1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.