without - android studio send email




Отправить задание электронной почты (19)

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

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

На самом деле, я хочу отфильтровать эти параметры списка. Я хочу показывать только приложения, связанные с электронной почтой, например Gmail, Yahoo Mail. Как это сделать?

Я видел такой пример в приложении «Android Market».

  1. Откройте приложение Android Market
  2. Откройте любое приложение, в котором разработчик указал свой адрес электронной почты. (Если вы не можете найти такое приложение, просто откройте мое приложение: - market: // details? Id = com.becomputer06.vehicle.diary.free, ИЛИ поиск по «Дневнику автомобиля»)
  3. Прокрутите вниз до раздела "РАЗРАБОТЧИК"
  4. Нажмите «Отправить электронную почту»

В диалоговом окне отображаются только приложения электронной почты, например Gmail, Yahoo Mail и т. Д. Он не показывает Bluetooth, Orkut и т. Д. Какой код создает такой диалог?


Этот код работает на моем устройстве

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

Изменить: больше не работает с новыми версиями 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);
}

Если вам нужны только почтовые клиенты, вы должны использовать 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);

Если вы хотите настроить таргетинг на Gmail, вы можете сделать следующее. Обратите внимание, что целью является «ACTION_SENDTO», а не «ACTION_SEND», а дополнительные поля намерений не нужны для 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")); 
}

Использование 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:[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"));

Использовать этот:

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

использовать build gradle:

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

Наконец, придумайте лучший способ сделать

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

Ни одно из этих решений не работало для меня. Вот минимальное решение, которое работает на 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..."));

Пытаться:

intent.setType("message/rfc822");

Работает на всех версиях 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..."));

Следующий код работал для меня !!

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

Составьте электронное письмо в почтовом клиенте телефона:

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

Это отлично работает для меня:

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

Это работает для меня:

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

т.е. используйте действие ACTION_SENDTO а не действие ACTION_SEND . Я пробовал это на нескольких устройствах Android 4.4, и он ограничивает всплывающее окно выбора только для отображения приложений электронной почты (электронная почта, Gmail, Yahoo Mail и т. Д.), И он правильно вставляет адрес электронной почты и тему в электронное письмо.


Это то, что я использую, и это работает для меня:

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

Это также позволит пользователю выбрать предпочтительное приложение электронной почты. Единственное, что вы не можете сделать, это указать адрес электронной почты получателя.


Это цитируется официальным документом 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);
    }
}

использование Anko - kotlin

context.email(email, subject, body)

когда вы измените свой намеренный.setType, как показано ниже, вы получите

intent.setType("text/plain");

Используйте android.content.Intent.ACTION_SENDTO чтобы получить только список клиентов электронной почты, без facebook или других приложений. Просто клиенты электронной почты. Пример:

new Intent(Intent.ACTION_SENDTO);

Я бы не предложил вам напрямую перейти к приложению электронной почты. Позвольте пользователю выбрать свое любимое приложение электронной почты. Не сдерживайте его.

Если вы используете ACTION_SENDTO, putExtra не работает, чтобы добавить тему и текст в намерение. Используйте Uri для добавления темы и основного текста.

EDIT: мы можем использовать message/rfc822 вместо "text/plain" в качестве типа MIME. Тем не менее, это не указывает «только предлагать почтовые клиенты» - это означает «предлагать все, что поддерживает данные message / rfc822». Это может легко включать в себя некоторые приложения, которые не являются почтовыми клиентами.

message/rfc822 поддерживает MIME-типы .mhtml, .mht, .mime


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




android-intent