Kirim Inten Email


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

Kode di atas membuka dialog yang menunjukkan aplikasi berikut: - Bluetooth, Google Documents, Yahoo Mail, Gmail, Orkut, Skype dll.

Sebenarnya, saya ingin memfilter daftar-opsi ini. Saya hanya ingin menampilkan aplikasi terkait email misalnya Gmail, Yahoo Mail. Bagaimana cara melakukannya?

Saya telah melihat contoh seperti itu pada aplikasi 'Android Market'.

  1. Buka aplikasi Android Market
  2. Buka aplikasi apa pun di mana pengembang telah menentukan alamat emailnya. (Jika Anda tidak dapat menemukan aplikasi semacam itu, cukup buka aplikasi saya: - market: // details? Id = com.becomputer06.vehicle.diary.free, ATAU cari dengan 'Vehicle Diary')
  3. Gulir ke bawah ke 'DEVELOPER'
  4. Klik pada 'Kirim Email'

Dialog hanya menampilkan Aplikasi email misalnya Gmail, Yahoo Mail dll. Tidak menampilkan Bluetooth, Orkut dll. Kode apa yang menghasilkan dialog seperti itu?


4
Maaf, ini tidak mungkin dengan Intent.ACTION_SEND. Mungkin ini bekerja dengan maksud langsung ke gmail-App tetapi saya tidak tahu apakah ini mungkin.
Thommy

19
Jika ada yang kebetulan belajar di sini tentang maksud email, EXTRA_MAIL harus sesuai dengan String[], bukan hanya Stringseperti yang ditunjukkan di sini.
bigstones

kemungkinan rangkap dari Kirim email melalui gmail
Sergey Glotov


Lihat di sini untuk saran yang bagus: medium.com/@cketti/…
Felix D.

Jawaban:


218

ketika Anda akan mengubah intent.setType Anda seperti di bawah ini Anda akan dapatkan

intent.setType("text/plain");

Gunakan android.content.Intent.ACTION_SENDTOhanya untuk mendapatkan daftar klien email, tanpa facebook atau aplikasi lain. Hanya klien email. Ex:

new Intent(Intent.ACTION_SENDTO);

Saya tidak akan menyarankan Anda langsung ke aplikasi email. Biarkan pengguna memilih aplikasi email favoritnya. Jangan memaksanya.

Jika Anda menggunakan ACTION_SENDTO, putExtra tidak berfungsi untuk menambahkan subjek dan teks ke maksud. Gunakan Uri untuk menambahkan teks subjek dan isi.

EDIT: Kita bisa menggunakan message/rfc822bukan "text/plain"sebagai tipe MIME. Namun, itu tidak menunjukkan "hanya menawarkan klien email" - ini menunjukkan "menawarkan apa pun yang mendukung data pesan / rfc822". Itu bisa dengan mudah menyertakan beberapa aplikasi yang bukan klien email.

message/rfc822 mendukung Jenis MIME dari .mhtml, .mht, .mime


7
Bisakah Anda memberikan beberapa kode untuk menghasilkan output yang diinginkan?
dira


76
Pemilih maksud mengatakan no apps installed to perform this intentketika saya menggunakan ACTION_SENDTO. Saya menggunakan Android 4.1.2 dan saya memiliki aplikasi email diinstal ...
ffleandro

4
Cara yang benar adalah jawaban dari Magnus. Saya merekomendasikan poster asli untuk mengubah jawaban yang diterima.
jhabbott

8
Menggunakan tipe MIME untuk melakukan operasi pengiriman adalah ide yang buruk, karena Anda pada dasarnya menginstruksikan Android untuk menyediakan daftar aplikasi yang mendukung pengiriman file jenis message/rfc822. Itu tidak sama dengan mengirim email. Gunakan mailto:protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.
Paul Lammertsma

872

Jawaban yang diterima tidak bekerja pada 4.1.2. Ini harus bekerja pada semua platform:

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

Semoga ini membantu.

Pembaruan: Menurut marcwjj , sepertinya pada 4.3, kita perlu meneruskan array string daripada string agar alamat email berfungsi. Kami mungkin perlu menambahkan satu baris lagi:

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

Tautan ref


7
Anda benar, dan tidak di 4.2. Jadi ini sebenarnya satu-satunya jawaban yang benar, terima kasih!
mDroidd

12
Ini sempurna. Seseorang di bawah ini menyebutkan bahwa menentukan bagian "mailto" adalah yang mempersempit pilihan yang tersedia untuk klien email. Menggunakan Uri.fromParts ("mailto", "", null) akan meletakkan kursor di bidang penerima - sempurna untuk apa yang saya butuhkan.
Shaggy

24
Coba emailIntent.putExtra ini (Intent.EXTRA_TEXT, "Saya badan email.");
thanhbinh84

15
Jika Anda tidak memiliki penerima tertentu, ini juga berfungsi:Uri.fromParts("mailto", "", null)
Phil

25
Ini tidak berfungsi di Android 4.3 saya lagi. Silakan periksa dokumen Android resmi tentang mengirim email sebagai maksud, yang berfungsi dengan baik: developer.android.com/guide/components/…
marcwjj

244

Ada tiga pendekatan utama:

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

1. Kustom 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. Menggunakan Intentekstra:

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. Perpustakaan Dukungan 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
Ini bekerja jauh lebih baik bagi saya - opsi lain muncul beberapa hal lurus (Skype, misalnya) sebagai penangan yang mungkin.
Chris Rae

1
Jika Anda memiliki %simbol di buffer, beberapa karakter dalam email yang dihasilkan tidak akan dikodekan dengan benar. Anda perlu menampilkan Uri.encodetarian yang disarankan oleh @minipif.
Giulio Piancastelli

12
Ini adalah jawaban terbaik di sini, jangan buang waktu Anda mencoba orang lain, yang kedua di sini adalah apa yang saya pilih dan berfungsi dengan baik, hanya menampilkan aplikasi email murni, bukan gDrive, bukan bluetooth .. dll. Terima kasih @ becomputer06
Hugo

1
Hati-hati dengan karakter "&". Jika Anda mendapat & karakter di badan email, metode ini akan memotong tubuh setelah &. Misalnya, jika Anda mengirim tubuh seperti "Saya & Badan Sampel", Anda hanya akan mendapatkan "Saya"
Emre Koç

4
Hasil ShareCompat di hampir semua aplikasi, bukan hanya klien email!
rpattabi

111

Ini dikutip dari Android doc resmi, saya sudah mengujinya di Android 4.4, dan berfungsi dengan baik. Lihat lebih banyak contoh di 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
Sepakat! Saya terkejut jawaban seperti ini begitu jauh di daftar. Saya kira itu pasti perubahan yang relatif baru di Android Docs.
Mikey

Bagus! yang bisa diandalkan, itu disebut 'Alkitab' dari pengembang aplikasi Android.
dev_android

1
Usus besar setelah surat melakukan trik untukku! Saya menggunakan "mailto" bukan "mailto:"
Nigel Crasto

1
Bekerja pada 5.1.1. Pilihan lain tidak berfungsi untuk saya.
Juanin

1
EXTRA_EMAILtidak bekerja untuk saya, jadi saya menggunakanUri.parse("mailto: " + myEmail)
Pratik Butani

89

Sebuah jawaban yang terlambat, meskipun saya menemukan solusi yang dapat membantu orang lain:

Versi Java

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


Versi Kotlin

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


Ini adalah output saya (hanya disarankan Gmail + Inbox):

output saya

Saya mendapat solusi ini dari situs Pengembang Android .


2
Bagi saya itu penting bahwa tidak ada ruang antara mailtodan email:mailto:abc@xyz.com
AlvaroSantisteban

Itu jawaban yang benar.
nibbana

36

Ini bekerja untuk saya:

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

yaitu menggunakan ACTION_SENDTOaksi daripada ACTION_SENDtindakan. Saya sudah mencobanya di beberapa perangkat Android 4.4 dan membatasi pemilih untuk hanya menampilkan aplikasi email (Email, Gmail, Yahoo Mail, dll) dan memasukkan dengan benar alamat email dan subjek ke dalam email.


35

Mencoba:

intent.setType("message/rfc822");

Dia benar, saya mencobanya dan menawarkan [Drive, Email, Gmail, Skype], ini harus menjadi "Jawaban yang tepat"
gurbieta

18
Menggunakan tipe MIME untuk melakukan operasi pengiriman adalah ide yang buruk, karena Anda pada dasarnya menginstruksikan Android untuk menyediakan daftar aplikasi yang mendukung pengiriman file jenis message/rfc822. Itu tidak sama dengan mengirim email. Gunakan mailto:protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.
Paul Lammertsma

34

Ini adalah cara yang tepat untuk mengirim maksud email sesuai dengan Dokumentasi Resmi Pengembang Android

Tambahkan baris kode ini ke aplikasi Anda:

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

Opsional: Tambahkan tubuh dan subjek, seperti ini

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

Anda telah menambahkan baris ini, tetapi bagus untuk dimiliki oleh pengguna baru

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

Ini akan menjadi alamat penerima, artinya pengguna akan mengirimi Anda (pengembang) email.


@ barnacle.m Terima kasih! Ini juga salah satu metode yang lebih sederhana. Masalahnya adalah bahwa jawaban saya tidak mendapatkan
upvote yang

1
Itu karena ada banyak jawaban serupa, tetapi yang ini menunjukkan dokumentasi Android resmi tentang masalah ini.
barnacle.m

1
Saya tidak dapat mengirim alamat email. Saya memperbaikinya seperti ini intent.data = Uri.parse ("mailto: somemail@xyz.com")
Hitesh Bisht

18

Akhirnya datang dengan cara terbaik untuk dilakukan

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

Kamu mengagumkan, bung.
Ashik

Tidak masalah Bung
Ajay Shrestha

2
Bekerja dengan sempurna.
Solanki Kamlesh

Lihat artikel ini yang menjelaskannya secara terperinci: medium.com/@cketti/…
Bruno Bieri

berfungsi dengan baik, pertahankan
Jacks

15

Jika Anda hanya ingin klien email yang harus Anda gunakan android.content.Intent.EXTRA_EMAILdengan array. Ini dia sebuah contoh:

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
tidak, Masih memunculkan banyak aplikasi lain - lebih banyak dariACTION_SENDTO
Dori

10

Kode berikut ini berfungsi dengan baik untuk saya.

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

Dari pengembang Android docs :

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

Sunting: Tidak berfungsi lagi dengan versi baru Gmail

Ini adalah satu-satunya cara yang saya temukan pada saat membuatnya berfungsi dengan karakter apa pun.

Jawaban doreamon adalah cara yang benar untuk pergi sekarang, karena berfungsi dengan semua karakter di versi baru Gmail.

Jawaban lama:


Ini milik saya. Tampaknya berfungsi pada semua versi Android, dengan dukungan subjek dan pesan, dan dukungan penuh karakter 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.encodeadalah cara yang tepat untuk digunakan. Tetapi mengapa menyebutnya dua kali untuk subjek dan tubuh?
Giulio Piancastelli

Jadi, melakukan encoding sendiri hanyalah ide yang buruk. Lebih baik gunakan Intent yang tepat dengan ekstra yang diperlukan, lihat misalnya stackoverflow.com/a/15022222
Giulio Piancastelli

Bagi saya ini adalah jawaban terbaik karena solusi lain hanya berfungsi dengan benar pada beberapa aplikasi email. Yang ini berfungsi dengan setiap aplikasi email yang saya uji.
Egis

7

Tidak ada solusi yang bekerja untuk saya. Inilah solusi minimal yang berfungsi pada Lollipop. Di perangkat saya, hanya Gmail dan aplikasi email asli yang muncul dalam daftar pemilih yang dihasilkan.

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

Bekerja di Semua Versi Android:

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

Jawaban Anda membantu saya. Terima kasih
Adnan Khan

5

Kode berikut berhasil untuk saya !!

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

Ini bekerja dengan baik untuk saya:

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

5

Jika Anda ingin memastikan bahwa maksud Anda hanya ditangani oleh aplikasi email (dan bukan aplikasi pesan teks atau sosial lainnya), maka gunakan ACTION_SENDTOtindakan tersebut dan sertakan skema data "mailto:". Sebagai contoh:

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

Saya menemukan ini di https://developer.android.com/guide/components/intents-common.html#Email


5

di Kotlin kalau ada yang melihat

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

Sebagian besar jawaban ini hanya berfungsi untuk kasus sederhana ketika Anda tidak mengirim lampiran . Dalam kasus saya, saya terkadang perlu mengirim lampiran (ACTION_SEND) atau dua lampiran (ACTION_SEND_MULTIPLE).

Jadi saya mengambil pendekatan terbaik dari utas ini dan menggabungkannya. Itu menggunakan perpustakaan dukungan ShareCompat.IntentBuildertetapi saya hanya menampilkan aplikasi yang cocok dengan ACTION_SENDTO dengan "mailto:" uri. Dengan cara ini saya hanya mendapatkan daftar aplikasi email dengan dukungan lampiran:

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
}

Ini sepertinya bisa berguna; ada kemungkinan mendapatkannya di Jawa?
Kyle Humfeld

1
Kotlin sangat mirip dengan Java, Anda harus dapat menyalin dan hanya mengubah beberapa hal.
David Vávra

3

Menggunakan intent.setType("message/rfc822");tidak berfungsi tetapi ini menunjukkan aplikasi tambahan yang tidak perlu menangani email (mis. GDrive). Menggunakan Intent.ACTION_SENDTOdengan setType("text/plain")adalah yang terbaik tetapi Anda harus menambahkan setData(Uri.parse("mailto:"))untuk mendapatkan hasil terbaik (hanya aplikasi email). Kode lengkapnya adalah sebagai berikut:

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

Perfect soultion
Daxesh Vekariya

2

Jika Anda ingin menargetkan Gmail maka Anda dapat melakukan hal berikut. Perhatikan bahwa maksudnya adalah "ACTION_SENDTO" dan bukan "ACTION_SEND" dan bidang maksud ekstra tidak diperlukan untuk Gmail.

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

Saya memperbarui jawaban Adil di Kotlin,

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

Ini gagal bahkan ketika Gmail ada di aplikasi.
AndroidDev

@AndroidDev di perangkat mana Anda menghadapi masalah ini?
Kishan Solanki

2

Silakan gunakan kode di bawah ini:

                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

Mungkin Anda harus mencoba ini: intent.setType("plain/text");

Saya menemukannya di sini . Saya telah menggunakannya di aplikasi saya dan hanya menampilkan opsi E-Mail dan Gmail.


2
"polos / teks" menunjukkan Bluetooth, Skype, dll. Periksa output yang diinginkan di aplikasi Android Market. Langkah-langkah tercantum dalam pertanyaan.
dira

1
Menggunakan tipe MIME untuk melakukan operasi pengiriman adalah ide yang buruk, karena Anda pada dasarnya menginstruksikan Android untuk menyediakan daftar aplikasi yang mendukung pengiriman file jenis plain/text, dan itu bahkan bukan tipe MIME yang valid. Itu tidak sama dengan mengirim email. Gunakan mailto:protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.
Paul Lammertsma

1

Tulis email di klien email ponsel:

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

Gunakan ini:

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

gunakan build gradle:

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

1

Inilah yang saya gunakan, dan itu berfungsi untuk saya:

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

Ini juga akan memungkinkan pengguna memilih aplikasi email pilihan mereka. Satu-satunya hal yang tidak dapat Anda lakukan adalah mengatur alamat email penerima.


Anda melewatkan a "di baris ke-2.
Tim

1

Kode ini berfungsi di perangkat saya

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

hanya membuka Gmail dan Email di perangkat saya
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();
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.