Kirim Inten Email

588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
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?

dira
sumber
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

Padma Kumar
sumber
7
Bisakah Anda memberikan beberapa kode untuk menghasilkan output yang diinginkan?
dira
9
@ becomputer06 merujuk ini: stackoverflow.com/questions/8284706/send-email-via-gmail
Padma Kumar
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","[email protected]", 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

thanhbinh84
sumber
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();
dira
sumber
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);
    }
}
marcwjj
sumber
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:[email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Versi Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:[email protected]")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


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

output saya

Saya mendapat solusi ini dari situs Pengembang Android .

capt.swag
sumber
2
Bagi saya itu penting bahwa tidak ada ruang antara mailtodan email:mailto:[email protected]
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[] { "[email protected]" });
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.

Adil Hussain
sumber
35

Mencoba:

intent.setType("message/rfc822");
Magnus
sumber
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[]{"[email protected]"});

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

Avi Parshan
sumber
@ 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: [email protected]")
Hitesh Bisht
18

Akhirnya datang dengan cara terbaik untuk dilakukan

String to = "[email protected]";
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);
Ajay Shrestha
sumber
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);
Addev
sumber
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);
Anam Ansari
sumber
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);
    }
}
marvatron
sumber
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);
}
minipif
sumber
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..."));
scottt
sumber
7

Bekerja di Semua Versi Android:

String[] TO = {"[email protected]"};
    Uri uri = Uri.parse("mailto:[email protected]")
            .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..."));
Usama Saeed US
sumber
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);
Suyog Gunjal
sumber
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"));
EpicPandaForce
sumber
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

Lamin Slimany
sumber
5

di Kotlin kalau ada yang melihat

val emailArrray:Array<String> = arrayOf("[email protected]")
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);
}
mughil
sumber
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
}
David Vávra
sumber
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:[email protected]"));
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"));
Rami Alloush
sumber
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:[email protected]" + 
    "?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")); 
}
pcodex
sumber
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) { "[email protected]" })
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)
}
Kishan Solanki
sumber
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();
                }
Tushar Bapte
sumber
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.

sianis
sumber
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[] { "[email protected]" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

sumber
1

Gunakan ini:

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

gunakan build gradle:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'
Manish
sumber
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.

belalang
sumber
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[] {"[email protected]"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));
Mahen
sumber
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();
}
Ahamadullah Saikat
sumber