Как отправить электронное письмо в формате HTML
-
18-09-2019 - |
Вопрос
я нашел способ отправить обычное текстовое электронное письмо, используя intent:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new
String[]{"example@mail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Test");
Но мне нужно отправить текст в формате HTML.
Попытка установить тип ("текст / html") не работает.
Решение
Вы можете пройти Spanned
текст в доп.Чтобы гарантировать, что намерение разрешается только для действий, которые обрабатывают электронную почту (например,приложения Gmail и электронная почта), вы можете использовать ACTION_SENDTO
с Uri, начинающимся со схемы mailto.Это также будет работать, если вы заранее не знаете получателя:
final Intent shareIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
shareIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<small><p>More content</p></small>")
.toString())
);
Другие советы
Это было очень полезно для HTML, но ACTION_SENDTO у меня не совсем сработало - я получил сообщение «действие не поддерживается».Я нашел здесь вариант, который делает:
http://www.coderanch.com/t/520651/Android/Mobile/no-application-perform-action-when
И вот мой код, который объединяет их вместе:
String mailId="yourmail@gmail.com";
Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts("mailto",mailId, null));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject text here");
// you can use simple text like this
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"Body text here");
// or get fancy with HTML like this
emailIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<a>http://www.google.com</a>")
.append("<small><p>More content</p></small>")
.toString())
);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
Я (пока) не начал разработку Android, но документация поскольку намерение гласит, что если вы используете EXTRA_TEXT, тип MIME должен быть text/plain.Похоже, если вы хотите увидеть HTML, вам придется вместо этого использовать EXTRA_STREAM...
Некоторое время пытался отправить html через приложение gmail, поэтому решил оставить некоторое представление о том, что я нашел, на случай, если у кого-то еще возникнут подобные проблемы.
Похоже, что бы я ни делал, я не мог сделать так, чтобы в html был выделен жирный текст.Затем я попробовал переключиться на клиент Outlook, и, к моему удивлению, он работал просто отлично.Html-разметка также работала на других старых устройствах, но не на моем (galaxy s7 API 26), поэтому я решил, что приложение gmail, похоже, отказалось от поддержки синтаксиса html, который исходит из намерения, или, возможно, теперь от вас требуется предоставить его каким-то очень специфическим способом, который четко не документирован.
Последней версией gmail, которая у меня работала, была версия 6.9.25...на эмуляторе Nexus 5X API 25 (Nougat) И он перестал работать, начиная с версии 7.5.21...В эмуляторе Nexus 5x API 26 (Oreo)
Вам необходимо изменить «EXTRA_TEXT» на «EXTRA_HTML_TEXT».
https://developer.android.com/reference/android/content/Intent.html#EXTRA_HTML_TEXT
А как насчет того, чтобы просто попытаться добавить немного HTML в текстовую область?
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "<strong>Test</strong>");