2013-11-24 2 views
0

Я разрабатываю приложение с эмулятором, в которое входит средство отправки электронной почты. Электронная почта должна иметь вложение 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

ответ

1

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

http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_%28no_Intents%29_in_Android

0

Это, вероятно, потому, что электронная почта приложение не может получить его из вашего личного пространства. Попробуйте поместить его на внешнее хранилище.

+0

Я подумал, что было все точки выдачи разрешений на Намерения. Кроме того, внешнее хранилище может быть недоступно, тогда как внутреннее всегда доступно. –

+0

@AndrewFielden Я имел в виду как тест. У вас не должно быть необходимости сделать его доступным для чтения, если вы используете контент-провайдер, но если вы это сделаете, вместо отправки 'content: //' uri просто поместите обычный файл uri, чтобы пропустить фазу поставщика. Также прочитайте этот вопрос: http: // stackoverflow.com/questions/4179594/what-is-the-correct-permission-handling-when-send-sensitive-app-data-as-email, поскольку это может помочь с другой потенциальной проблемой при использовании провайдера. –

+0

Хорошо, спасибо, я отдам это. То, что я нахожу немного разочаровывающим, - это полное отсутствие индикаторов ошибок в системе. Он просто молчал. –

Смежные вопросы