Я разрабатываю приложение с эмулятором, в которое входит средство отправки электронной почты. Электронная почта должна иметь вложение HTML. HTML-файл создается в области кеша приложения, и я проверил его, с правильным контентом. Файл находится вAndroid: вложение HTML не отправляется по электронной почте
/data/data/<package name>/cache/temp_file.html
Письмо отправляется нормально, но приложения нет. В журнале нет ошибок, и никаких исключений не было. Я думал, что это связано с правами доступа к файлам, поэтому я убедился, что файл был создан с доступом для чтения для всех. Я также предоставляю разрешение READ_URI дочерней активности (почтовый клиент). Поэтому я не понимаю, почему приложение не отправляется с электронной почтой. После чистки многих статей об этом я, кажется, делаю все необходимое, но это не работает. Обратите внимание, что я использую класс оболочки HTML-файла, как описано в этой статье. http://blog.blundell-apps.com/html-in-an-email-intent/ Так getFilePath()
возвращает Uri файла вложения.
private void sendToRecipients(String[] emails) {
HtmlFile emailText = buildEmailContent();
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/html");
emailIntent.putExtra(Intent.EXTRA_EMAIL, emails);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Details");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Details");
emailIntent.putExtra(Intent.EXTRA_STREAM, emailText.getFilePath());
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(emailIntent, "email"));
}
Я также использую поставщик контента, который объявлен в манифесте, как это -
<provider
android:name="<package>.CacheFileProvider"
android:authorities="<my authority>"
android:enabled="true"
android:exported="true"
android:grantUriPermissions="true"
/>
UPDATE:
Я заменил мой пользовательский контент-провайдер с FileProvider , после прочтения этого http://developer.android.com/reference/android/support/v4/content/FileProvider.html
Итак, теперь я вижу, что мой html-файл прикрепляется в беспорядке Gmail возраст композитора. Все выглядит хорошо, но когда сообщение получено, нет приложения!
Глядя на источник сообщения, оно должно быть получено с
Content-Type: multipart/alternative
и прикрепленным разделе HTML. Но я не вижу ни одного из моих прикрепленных HTML в полученном сообщении. Все, что я получаю только один
Content-Type: text/plain
UPDATE:
Я решил забыть об использовании клиентского приложения Gmail. Просто отправьте файл (плюс вложение) напрямую, без вмешательства пользователя. Эта страница содержит всю информацию, которую нужно
http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_%28no_Intents%29_in_Android
Я подумал, что было все точки выдачи разрешений на Намерения. Кроме того, внешнее хранилище может быть недоступно, тогда как внутреннее всегда доступно. –
@AndrewFielden Я имел в виду как тест. У вас не должно быть необходимости сделать его доступным для чтения, если вы используете контент-провайдер, но если вы это сделаете, вместо отправки 'content: //' uri просто поместите обычный файл uri, чтобы пропустить фазу поставщика. Также прочитайте этот вопрос: http: // stackoverflow.com/questions/4179594/what-is-the-correct-permission-handling-when-send-sensitive-app-data-as-email, поскольку это может помочь с другой потенциальной проблемой при использовании провайдера. –
Хорошо, спасибо, я отдам это. То, что я нахожу немного разочаровывающим, - это полное отсутствие индикаторов ошибок в системе. Он просто молчал. –