отправка электронного письма с несколькими вложениями - PullRequest
6 голосов
/ 16 марта 2011

Я пытаюсь отправить электронное письмо с несколькими вложениями.

Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email1@email.com", "email2@email.com"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "The Text");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
emailIntent.setType("text/plain");
startActivity( Intent.createChooser(emailIntent, "Send Email Using: ") );

Это прекрасно работает, когда я отправляю электронную почту с помощью gmail, но не прикрепляет вложения, если я отправляю электронную почту с помощью почтового клиента на Nexus One. В нем есть весь текст, тема и т. Д., Но просто нет вложений. Учетная запись электронной почты, которую я имею, является учетной записью обмена, если это имеет значение ...

Ответы [ 3 ]

12 голосов
/ 05 августа 2011

Попробуйте, это работает нормально.

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("plain/text");

ArrayList<Uri> uris = new ArrayList<Uri>();

String[] filePaths = new String[] {image1 Path,image2 path};
for (String file : filePaths) {
    File fileIn = new File(file);
    Uri u = Uri.fromFile(fileIn);
    uris.add(u);
}

if ( !(app_preferences.getString("email", "") == null || app_preferences.getString("email", "").equals(""))) {
    emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {app_preferences.getString("email", "")});    
}

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject name");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Please find the attachment.");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

startActivity(Intent.createChooser(emailIntent, "Email:"));
0 голосов
/ 22 августа 2018

Если вы хотите отправить некоторые файлы, обратите внимание! 1. Используйте с ACTION_SEND_MULTIPLE вместо ACTION_SEND. 2. Используйте с setType («text / plain») вместо setType («application / image») 3. Используйте с putParcelableArrayListExtra (Intent.EXTRA_STREAM, imageUris) вместо putExtra (Intent.EXTRA_STREAM, imageUris)

                Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
                emailIntent.setType("text/plain");
                emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{""});
                emailIntent.putExtra(Intent.EXTRA_SUBJECT,"SUBJECT");
                emailIntent.putExtra(Intent.EXTRA_TEXT, "BODY");

                ArrayList<Uri> imageUris = new ArrayList<>();

                imageUris.add(Uri.parse("file://" + invoicePath));
                if (signaturePath != null) {
                    imageUris.add(Uri.parse("file://" + signaturePath));
                }

                emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
                startActivity(Intent.createChooser(emailIntent, "Send mail..."));

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

0 голосов
/ 11 января 2014

Пробовал все это миллион раз - заставил его работать, но получил неприятное предупреждение.Обнаружил, что это ошибка Android.Исправление и дополнительная информация здесь:

https://code.google.com/p/android/issues/detail?id=38303

Error: ClassCastException warning in log when opening e-mail app with a body and multiple file attachments.

Обновление: найден обходной путь.Вместо

sendIntent.putExtra(Intent.EXTRA_TEXT, "See attached CSV files.");

Поместите текст в ArrayList

ArrayList<String> extra_text = new ArrayList<String>();
extra_text.add("See attached CSV files.");
sendIntent.putStringArrayListExtra(Intent.EXTRA_TEXT, extra_text); 

Вуаля!Больше никаких исключений, и EXTRA_TEXT заканчивается как тело письма.

РЕДАКТИРОВАТЬ: я думаю, что просто комментируя эту строку, избавляется от ошибки - но тогда вы не сможете ввести какую-либо информациютело.В моем случае это нормально, так как я пишу только файлы журналов.Удалите эту строку, чтобы избавиться от предупреждения: 'sendIntent.putExtra (Intent.EXTRA_TEXT, "См. Прикрепленные файлы CSV.");'

...