Отправить письмо Намерение

Для уровня API 3+ не более одной строки кода:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("name.of.package");

Возвращает запуск CATEGORY_INFO Intent (приложения без активности запуска, обои, например, часто используйте это, чтобы предоставить некоторую информацию о приложении), и, если его не найти, возвращает CATEGORY_LAUNCH пакета, если он существует.

522
задан Charlie Brumbaugh 5 January 2018 в 19:41
поделиться

5 ответов

Использование 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"));
0
ответ дан Rami Alloush 5 January 2018 в 19:41
поделиться

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

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, ""));
0
ответ дан 5 January 2018 в 19:41
поделиться

Если вы хотите, чтобы ваше намерение обрабатывалось только приложением электронной почты (а не другими приложениями для обмена текстовыми сообщениями или социальными приложениями), то используйте действие 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

3
ответ дан juunas 5 January 2018 в 19:41
поделиться

Работает на всех версиях 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
ответ дан Usama Saeed US 5 January 2018 в 19:41
поделиться

Принятый ответ не работает на 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

Ссылка

829
ответ дан Community 5 January 2018 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: