Надіслати намір електронною поштою


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

Вищевказаний код відкриває діалогове вікно із наступними програмами: - Bluetooth, Документи Google, Yahoo Mail, Gmail, Orkut, Skype тощо.

Власне, я хочу відфільтрувати ці списки-варіанти. Я хочу показувати лише додатки, пов’язані з електронною поштою, наприклад Gmail, Yahoo Mail. Як це зробити?

Я бачив такий приклад у додатку "Android Market".

  1. Відкрийте додаток Android Market
  2. Відкрийте будь-яку програму, де розробник вказав свою електронну адресу. (Якщо ви не можете знайти такий додаток, просто відкрийте мій додаток: - market: // details? Id = com.becomputer06.vehicle.diary.free, АБО пошук за "Щоденником транспортного засобу")
  3. Прокрутіть униз до пункту "DEVELOPER"
  4. Натисніть "Надіслати електронний лист"

Діалогове вікно показує лише програми електронної пошти, наприклад Gmail, Yahoo Mail тощо. У ньому не відображається Bluetooth, Orkut тощо. Який код створює такий діалог?


4
На жаль, це неможливо із наміром.ACTION_SEND. Можливо, це працює з наміром безпосередньо в gmail-App, але я не знаю, чи це можливо.
Томмі

19
Якщо хтось дізнається тут про наміри електронної пошти, EXTRA_MAIL повинен відповідати знаку "a" String[], а не лише Stringяк показано тут.
bigstones



Ознайомтесь із корисною порадою: medium.com/@cketti/…
Фелікс Д.

Відповіді:


218

коли ви зміните свій intent.setType, як показано нижче, ви отримаєте

intent.setType("text/plain");

Використовуйте, android.content.Intent.ACTION_SENDTOщоб отримати лише список клієнтів електронної пошти, без фейсбуку та інших програм. Просто клієнти електронної пошти. Наприклад:

new Intent(Intent.ACTION_SENDTO);

Я б не радив вам перейти безпосередньо до програми електронної пошти. Дозвольте користувачеві вибрати улюблену програму електронної пошти. Не обмежуйте його.

Якщо ви використовуєте ACTION_SENDTO, putExtra не працює, щоб додати тему та текст до наміру. Використовуйте Uri, щоб додати тему та текст тексту.

EDIT: Ми можемо використовувати message/rfc822замість "text/plain"типу MIME. Однак це не означає, що "пропонують лише клієнтів із електронною поштою" - це вказує на "пропонувати все, що підтримує повідомлення message / rfc822". Це може легко включати деякі програми, які не є клієнтами електронної пошти.

message/rfc822 підтримує типи MIME .mhtml, .mht, .mime


7
Чи можете ви надати якийсь код, щоб отримати бажаний вихід?
dira


76
Вибір наміру говорить, no apps installed to perform this intentколи я використовую ACTION_SENDTO. Я використовую Android 4.1.2, і у мене встановлено додаток для електронної пошти ...
ffleandro

4
Правильний спосіб - це відповідь Магнуса. Рекомендую оригінальний плакат змінити прийняту відповідь.
jhabbott

8
Використання типу MIME для виконання операції надсилання є поганою ідеєю, оскільки ви в основному доручаєте Android надати список програм, які підтримують надсилання файлу типу message/rfc822. Це не те саме, що надсилання електронного листа. Використовуйте mailto:протокол замість цього, адже саме це розуміють клієнти електронної пошти.
Пол Ламмерцма

872

Прийнята відповідь не працює в 4.1.2. Це має працювати на всіх платформах:

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

Сподіваюсь, це допомагає.

Оновлення: За словами marcwjj , схоже, що на 4.3, нам потрібно передати рядковий масив замість рядка для електронної адреси, щоб він працював. Можливо, нам потрібно буде додати ще один рядок:

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

Посилання на посилання


7
Ви маєте рацію, і не на 4.2. Тож це насправді єдина правильна відповідь, дякую!
mDroidd

12
Це ідеально. Хтось нижче згадував, що визначення частини "mailto" - це те, що звужує доступні варіанти для клієнтів електронної пошти. Використання Uri.fromParts ("mailto", "", null) поставить курсор у поле одержувача - ідеально підходить для того, що мені потрібно.
Shaggy

24
Спробуйте це emailIntent.putExtra (Intent.EXTRA_TEXT, "Я тіло електронної пошти.");
ніжhbinh84

15
Якщо у вас немає конкретного одержувача, це також працює:Uri.fromParts("mailto", "", null)
Філ

25
На моєму Android 4.3 це більше не працює. Будь ласка, ознайомтесь із офіційним документом Android щодо надсилання електронного листа в якості наміру, який прекрасно працює: developer.android.com/guide/components/…
marcwjj

244

Існує три основні підходи:

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

1. Спеціальні 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. Використання Intentдодатків:

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. Бібліотека підтримки 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
Для мене це працювало набагато краще - інші варіанти вискакували деякі прямі речі (наприклад, Skype) як можливі обробники.
Chris Rae

1
Якщо %у буфері є символ, деякі символи в отриманому електронному листі будуть неправильно закодовані. Вам потрібно виконати Uri.encodeтанець, запропонований @minipif.
Джуліо Піанкастеллі

12
Це кращі відповіді тут, не витрачайте свій час , намагаючись іншими, другий ось що я вибрав , і він прекрасно працює, показуючи тільки чисті програми електронної пошти, що не Gdrive, а НЕ Bluetooth .. і т.д. Спасибі @ becomputer06
Hugo

1
Будьте уважні до "&" персонажа. Якщо ви отримали & символ у тілі електронної пошти, цей метод відріже тіло після &. Наприклад, якщо ви надішлете тіло типу "Я і зразок тіла", ви отримаєте просто "Я"
Емре Коч

4
Результати ShareCompat майже у всіх програмах, а не лише електронних клієнтах!
рпаттабі

111

Це цитується з офіційного документа Android, я тестував його на Android 4.4 і працює чудово. Дивіться більше прикладів на веб-сторінці 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
Домовились! Я здивований, що така відповідь поки що в списку. Я думаю, це, мабуть, було відносно недавньою зміною в Документах Android.
Майкі

Чудово! Надійний, він згадував "Біблію" розробників додатків для Android.
dev_android

1
Двокрапка після пошти зробила для мене трюк! Я використовував "mailto" замість "mailto:"
Найджел Красто

1
Робота над 5.1.1. Інші варіанти для мене не працюють.
Хуанін

1
EXTRA_EMAILне працює для мене, тому я використавUri.parse("mailto: " + myEmail)
Пратік Бутані

89

Пізня відповідь, хоча я зрозумів рішення, яке може допомогти іншим:

Версія Java

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


Версія Котліна

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


Це був мій вихід (запропоновано лише Gmail + Inbox):

мій вихід

Я отримав це рішення від сайту розробників Android .


2
Для мене було важливо, щоб між mailtoта електронною поштою не було місця :mailto:abc@xyz.com
AlvaroSantisteban

Це правильна відповідь.
nibbana

36

Це працює для мене:

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

тобто використовувати ACTION_SENDTOдію, а не ACTION_SENDдію. Я спробував це на кількох пристроях Android 4.4, і це обмежує спливаюче вікно вибору лише дисплейними програмами електронної пошти (електронною поштою, Gmail, Yahoo Mail тощо), і він правильно вставляє адресу електронної пошти та тему в електронну пошту.


35

Спробуйте:

intent.setType("message/rfc822");

Він правий, я спробував це і пропонує [Диск, електронна пошта, Gmail, Skype], це має бути "Правильна відповідь"
gurbieta

18
Використання типу MIME для виконання операції надсилання є поганою ідеєю, оскільки ви в основному доручаєте Android надати список програм, які підтримують надсилання файлу типу message/rfc822. Це не те саме, що надсилання електронного листа. Використовуйте mailto:протокол замість цього, адже саме це розуміють клієнти електронної пошти.
Пол Ламмерцма

34

Це правильний спосіб надсилання намірів електронної пошти відповідно до офіційної документації для розробника Android

Додайте в додаток ці рядки коду:

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

Необов’язково: додайте тіло та предмет, як це

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

Ви вже додали цей рядок, але добре мати для нових користувачів

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

Це буде адреса одержувача, тобто користувач надішле вам (розробнику) електронний лист.


@ barnacle.m Дякую! Це також один з більш простих методів. Проблема полягає в тому, що моя відповідь не отримує достатньо результатів :(
Аві Паршан,

1
Це тому, що є багато подібних відповідей, але ця вказує на офіційну документацію на Android щодо цього питання.
barnacle.m

1
Мені не вдалося надіслати електронну адресу. Я встановив його як цей intent.data = Uri.parse ( "електронна пошта: somemail@xyz.com")
Hitesh Bisht

18

Нарешті придумайте найкращий спосіб зробити

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

Ти дивовижний, чувак.
Ашик

Без проблем чувак
Ajay Shrestha

2
Працює чудово.
Соланки

Ознайомтеся з цією статтею, яка детально описує її: medium.com/@cketti/…
Бруно

працює добре, так тримати
Jacks

15

Якщо ви хочете лише клієнтів електронної пошти, вам слід використовувати android.content.Intent.EXTRA_EMAILмасив. Ось приклад:

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
ні, все ще з'являється багато інших програм - набагато більше, ніжACTION_SENDTO
Дорі,

10

Наступний код добре працює для мене.

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

З документів розробників Android :

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

Редагування: Більше не працює з новими версіями Gmail

Це був єдиний спосіб, який я знайшов у той час, щоб змусити його працювати з будь-якими персонажами.

Відповідь doreamon - це правильний шлях, оскільки він працює з усіма символами в нових версіях Gmail.

Стара відповідь:


Ось моя. Схоже, він працює у всіх версіях Android, підтримуючи тему та тему повідомлення та повну підтримку символів 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.encode- це правильний шлях. Але навіщо називати це два рази для предмета та тіла?
Джуліо Піанкастеллі

Отже, робити кодування самостійно - лише погана ідея. Краще використовувати правильне Намір необхідні додаткові послуги, наприклад , див stackoverflow.com/a/15022222
Джуліо Piancastelli

Для мене це найкраща відповідь, оскільки інші рішення працюють правильно лише з деякими програмами електронної пошти. Цей працює з усіма програмами електронної пошти, які я тестував.
Егіс

7

Жодне з цих рішень не працювало для мене. Ось мінімальне рішення, яке працює на Lollipop. На моєму пристрої в отриманому списку вибору відображаються лише Gmail та додатки нашої електронної пошти.

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

Працює на всіх версіях 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..."));

Ваша відповідь мені допомогла. Спасибі
Аднан Хан

5

Наступний код працював на мене !!

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

Це для мене працює чудово:

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

5

Якщо ви хочете переконатися, що вашим наміром керує лише програма електронної пошти (а не інші текстові повідомлення або соціальні додатки), то використовуйте ACTION_SENDTOдію та включіть схему даних "mailto:". Наприклад:

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

Я знайшов це на https://developer.android.com/guide/components/intents-common.html#Email


5

в Котліні, якщо хтось дивиться

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

Більшість цих відповідей працюють лише для простого випадку, коли ви не надсилаєте вкладення . У моєму випадку мені іноді потрібно надсилати вкладення (ACTION_SEND) або два вкладення (ACTION_SEND_MULTIPLE).

Тому я взяв найкращі підходи з цієї нитки та поєднав їх. Він використовує бібліотеку підтримки, ShareCompat.IntentBuilderале я показую лише додатки, які відповідають ACTION_SENDTO урі "mailto:". Таким чином я отримую лише список програм електронної пошти із підтримкою вкладень:

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
}

Схоже, це може бути корисним; будь-який шанс отримати його на Java?
Кайл Гумфельд

1
Kotlin дуже схожий на Java, ви повинні вміти копіювати пасту і просто змінити кілька речей.
Давид Вавра

3

Використання intent.setType("message/rfc822");працює, але він показує додаткові програми, які не обов'язково обробляють електронні листи (наприклад, GDrive). Використання Intent.ACTION_SENDTOз setType("text/plain")- найкраще, але ви повинні додати, setData(Uri.parse("mailto:"))щоб отримати найкращі результати (лише програми електронної пошти). Повний код такий:

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

Ідеальна
душа

2

Якщо ви хочете націлити на Gmail, то можете зробити наступне. Зауважте, що наміром є "ACTION_SENDTO", а не "ACTION_SEND", а додаткові поля намірів не потрібні 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

Я оновлюю відповідь Аділа в Котліні,

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

Це не вдається навіть тоді, коли Gmail у додатку.
AndroidDev

@AndroidDev, на якому пристрої ви стикаєтеся з проблемою?
Kishan Solanki

2

Будь ласка, використовуйте наведений нижче код:

                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

Можливо, вам варто спробувати це: intent.setType("plain/text");

Я знайшов це тут . Я використовував його у своєму додатку, і він показує лише параметри електронної пошти та Gmail.


2
"звичайний / текстовий" відображає Bluetooth, Skype і т.д. Оформити бажаний вихід у додатку Android Market. Кроки наведені у питанні.
dira

1
Використання типу MIME для виконання операції надсилання є поганою ідеєю, оскільки ви в основному доручаєте Android надати список програм, які підтримують надсилання файлу типу plain/text, і це навіть не дійсний тип MIME. Це не те саме, що надсилання електронного листа. Використовуйте mailto:протокол замість цього, адже саме це розуміють клієнти електронної пошти.
Пол Ламмерцма

1

Створення електронного листа в електронному клієнті телефону:

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

Використовуй це:

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

використовувати build gradle:

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

1

Це те, що я використовую, і це працює для мене:

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

Це також дозволить користувачеві вибрати бажаний додаток електронної пошти. Єдине, що ви не можете зробити, це встановити електронну адресу одержувача.


Ви не вистачаєте "на другому рядку.
Тім

1

Цей код працює на моєму пристрої

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

він відкриває лише Gmail та електронну пошту на моєму пристрої
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();
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.