Отправка электронной почты с вложением из папки "Активы"

    //EMAIL SENDING CODE  FROM ASSET FOLDER
    email = editTextEmail.getText().toString();
    subject = editTextSubject.getText().toString();
    message = editTextMessage.getText().toString();
    final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    emailIntent.setType("file/html");
    emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://com.example.deepa.xmlparsing/file:///android_assets/Combination-1.html"));
    startActivity(Intent.createChooser(emailIntent, "Send email using"));

Наконец, я получаю файл из папки с ресурсами (Combination-1.html).

Он получает

Исключение ошибки в файле времени выполнения

Есть ли другой способ отправить вложение файла?

Ответы

Ответ 1

Создайте объект File вашего файла папок вашего имущества и прикрепите этот объект к вашему намерению электронной почты.

И как уже упоминалось в вашем файле времени выполнения, не найденное исключение, это может быть причиной файла URL ":///android_asset/" не указывает на конкретный каталог, он используется WebView только для защиты активов. Вытянули, что from

вы можете открыть это как входной поток и скрывать этот InputStream до File

in = new BufferedReader(new InputStreamReader(activity.getAssets().open(myfile.pdf))); 

Отправьте этот файл в электронном виде следующим образом.

Intent intent = new Intent(Intent.ACTION_SEND ,Uri.parse("mailto:")); 
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "Card Set ");
intent.putExtra(Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
activity.startActivity(intent);

Где Intent.ACTION_SEND используется для отправки электронной почты, Intent.EXTRA_STREAM для вложений с электронной почтой. вы можете иметь несколько Intent.EXTRA_STREAM в единственном намерении ссылаться на несколько вложений с помощью intent.setAction(Intent.ACTION_SEND_MULTIPLE);.

intent.setType(String mimeType) Параметр ввода представляет собой данные типа MIME, которые вы хотите получить в ответ от намерения стрельбы (здесь умышленный экземпляр). где setype может быть

image/jpeg
audio/mpeg4-generic
text/html
audio/mpeg
audio/aac
audio/wav
audio/ogg
audio/midi
audio/x-ms-wma
video/mp4
video/x-msvideo
video/x-ms-wmv
image/png
image/jpeg
image/gif
.xml ->text/xml
.txt -> text/plain
.cfg -> text/plain
.csv -> text/plain
.conf -> text/plain
.rc -> text/plain
.htm -> text/html
.html -> text/html
.pdf -> application/pdf
.apk -> application/vnd.android.package-archive

Ответ 2

Самый простой способ отправить электронное письмо - создать намерение типа ACTION_SEND:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, "Test");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{recipient_address});
intent.putExtra(Intent.EXTRA_TEXT, "Attachment test");

Чтобы прикрепить один файл, добавьте некоторые расширенные данные в Intent:

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("/path/to/file")));
intent.setType("text/html");

Или используйте Html.fromHtml() для сборки содержимого html:

intent.putExtra( Intent.EXTRA_TEXT,
                 Html.fromHtml(new StringBuilder()
                 .append("<h1>Heading 1</h1>")
                 .append("<p><a>http://www.google.com</a></p>")
                 .toString()));

Для нескольких вложений:

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_SUBJECT, "Test multiple");
intent.putExtra(Intent.EXTRA_TEXT, "multiple attachments");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{recipient_address});
ArrayList<Uri> uris = new ArrayList<Uri>();
uris.add(Uri.fromFile(new File("/path/to/first/file")));
uris.add(Uri.fromFile(new File("/path/to/second/file")));
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

Завершить с вызовом функции startActivity().

Ответ 3

Вы можете использовать следующий код для достижения своей цели и можете изменять строчную кодированную строку в соответствии с вашими требованиями.

String filename="contacts_sid.vcf"; 
File filelocation = new 
File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
Uri path = Uri.fromFile(filelocation); 
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// Here you can set the type to 'email'
emailIntent .setType("abc.xyz.cursor.dir/email");
String to[] = {"[email protected]"};
emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
//  For the attachment
emailIntent .putExtra(Intent.EXTRA_STREAM, path);
// the mail subject
emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Find Attachments with email");
startActivity(Intent.createChooser(emailIntent , "Sending  email..."));

Ответ 4

Вы не можете делиться файлом папки Asset с другим приложением без ContentProvider. Вы можете отправить файл, который может быть доступен для каждого приложения. Например, кто-то в памяти мобильного телефона или SD-карте.

Общий доступ Отметьте этот ответ @CommonsWare

Или Прочитайте текстовый файл и используйте @RonTLV Ответ и почту.

Или Скопируйте файл в память intenal и добавьте к отправке запуска. Надеюсь, этот ответ поможет.