Отправка html-адреса электронной почты в android с помощью <table> и т.д. - действительно ли нет встроенного способа Intent?

Я прочитал хороший бит об ограничениях отправки html-писем от android. Все предложения по отправке html-сообщения, похоже, состоят в том, чтобы просто передать Html.fromHtml(yourHtmlString) в намерение как Intent.EXTRA_TEXT. Это работает для нескольких базовых тегов - жирным, курсивом - но не будет ничего подобного таблице html.

Похоже, вы могли бы попытаться расширить некоторые функции Html или реализовать свой собственный обработчик тегов, но мне интересно, нет ли более фундаментального ограничения, которое заставит вас сделать что-то совершенно другое (например, с почтой api или что-то еще).

Причина, по которой я предлагаю это, состоит в том, что, насколько известно самому намерению, Html.fromHtml(blah) - это просто charsequence, и если вы вызываете методы на интерфейсе charsequence на этом объекте, вы не видите никаких html (по крайней мере, я этого не делал). Весь материал html/tag, похоже, завернут в SpannableStringBuilder, который фактически возвращает Html.fromHtml... и мне интересно, выглядит ли приложение gmail под обложками, чтобы увидеть, что такое charsequence, и затем может обрабатывать несколько тегов, что означает, что нет никакой надежды в том, чтобы что-либо делать с вашим приложением, чтобы получить/обмануть приложение gmail, чтобы обрабатывать все более сложное, чем полужирное, курсивное и т.д.

Я просмотрел необработанное письмо, которое фактически отправляет приложение gmail, и оно автоматически отправляет как текст /plain без тегов, так и версию text/html с ограниченным количеством тегов. Я даже пытался придерживаться некоторых экранированных html-тегов, которые в конечном итоге могут быть преобразованы в фактические теги в части текста /html электронной почты, но, увы, они не сбежали... и это, конечно, будет немного взломанным.

В любом случае, для тех, кто, возможно, заглянул в это больше, я хотел сделать дополнительное подтверждение того, что стандартная андроидная функция "отправить html-email" позволит вам сходить с ума поближе к тому, что вам может понадобиться, но в конце концов вы (например, Отправка электронной почты на Android с использованием API JavaMail без использования стандартного/встроенного приложения, что означает вам нужно иметь дело с материалом pw и т.д.).

Примечание (позже): Я обернул SpannableStringBuilder, возвращенный из Html.fromHtml, с помощью специального класса, который расширил SpannableStringBuilder и передал его, с целью прослушивания вызовов в Spanned interface. Оказывается, что когда вещи записываются на посылку, отправленную в намерение электронной почты, TextUtils.writeToParcel делает некоторую специальную проверку, чтобы искоренить жирный/курсивный материал, сначала проверив, является ли CharSequence экземпляром Spanned, а затем просит промежутки (через spanned.getSpans). Тем не менее, я не вижу никакой явной надежды на то, чтобы сделать модификации, чтобы получить что-то простое, как теги table/td, которые там обрабатываются. И я даже попробовал модифицировать toString() моего подкласса SpannableStringBuilder, чтобы вернуть некоторый raw html таблицы, чтобы увидеть, что произойдет, но оно ускользнуло где-то там в процессе обработки посылки.

И еще (позже): TextUtils.writeToParcel(CharSequence cs, Parcel p,...) будет, если cs является экземпляром "Spanned", напишите эти интервалы, только если они реализуют интерфейс "ParcelableSpan"... который является "особым видом Parcelable для объекты, которые будут использоваться в качестве текстовых пространств" и "могут использоваться только кодом в рамках, а не предназначены для приложений для реализации своих собственных пространственных интервалов". Таким образом, даже если вы хотите подключиться к этому и написать свой собственный, чтобы обрабатывать теги таблицы или что-то еще, кажется, это не рекомендуется. Человек, которого я хочу, чтобы hackbod весил бы здесь, с чем-то очевидным, что я пропустил.

Ответы

Ответ 1

Это работает для нескольких базовых тегов - жирным, курсивом - но не будет ничего подобного таблице html.

Это, скорее всего, функция почтового клиента. Не все почтовые клиенты могут создавать произвольные HTML файлы на любой платформе. Таким образом, хотя Mozilla Thunderbird позволяет создавать HTML-почту с таблицей, Gmail не делает (в любом случае, я не вижу в нем опции в окне создания сообщений).

Мне интересно, нет ли более фундаментального ограничения, которое заставит вас сделать что-то совершенно другое.

Если вы не пишете собственный почтовый клиент, расширяя несколько классов, необходимых для того, чтобы позволить TextView и EditText обрабатывать HTML-таблицы (это способ больше, чем просто класс Html), вам нехорошо.

и мне интересно, выглядит ли приложение gmail под обложками, чтобы увидеть, что такое charsequence, а затем может обрабатывать несколько тегов

TextView и EditText могут "обрабатывать несколько тегов", выстраиваясь примерно так, что Html может анализировать/генерировать и SpannedString может представлять.

Ничто из этого не может обрабатывать HTML-таблицу. Не JavaScript. Не CSS. Nor iframe или любое количество других тегов.

но, в конце концов, вам нужно укусить пулю и реализовать множество вещей более низкого уровня.

Начну с того, что спрошу себя, стоит ли отправлять электронную почту с таблицами прямо с телефона. Вы можете отправлять HTML-почту с таблицами с вашего сервера с помощью интерфейса веб-службы или вы можете отправлять таблицы электронной почты HTML-почты с телефона. Ни один из них не потребует, чтобы вы собрали "материал pw".