2011-10-16 8 views
15

Przeczytałem sporo na temat ograniczeń wysyłania e-maili html z Androida. Wszystkie sugestie wysyłania e-maili HTML to po prostu przekazać Html.fromHtml (yourHtmlString) do intencji jako Intent.EXTRA_TEXT. Działa to dla kilku podstawowych znaczników - pogrubienie, kursywa - ale nie będzie dla niczego jak tabela html.Wysyłanie wiadomości e-mail w formacie HTML w Androidzie przy użyciu <table> itd. - czy naprawdę nie ma względnie wbudowanego sposobu działania?

Wygląda na to, że możesz spróbować rozszerzyć niektóre funkcje HTML lub zaimplementować własny taghandler, ale zastanawiam się, czy nie ma bardziej zasadniczego ograniczenia, które zmusi cię do zrobienia czegoś zupełnie innego (jak w przypadku mail lub coś podobnego).

Powodem, dla którego proponuję, jest to, że jeśli chodzi o sam intencję, Html.fromHtml (blah) jest po prostu charsequence, a jeśli wywołasz metody w interfejsie charsequence na tym obiekcie, nie widzisz żadnych html rzeczy (przynajmniej ja nie). Wszystkie rzeczy html/tag wydają się być zawinięte w SpannableStringBuilder, że Html.fromHtml faktycznie zwraca ... i zastanawiam się, czy aplikacja Gmaila wygląda pod pokrywami, aby zobaczyć, co jest naprawdę charsequence, a następnie może obsłużyć kilka tagów , co oznacza, że ​​nie ma żadnej nadziei na robienie niczego po stronie aplikacji, aby uzyskać/oszukać aplikację Gmaila, aby poradzić sobie z czymś bardziej skomplikowanym niż pogrubienie, kursywa itp.

Sprawdziłem pocztę e-mail w aplikacji Gmail faktycznie wysyła i automatycznie wysyła zarówno tekst/zwykły bez tagów, jak i wersję tekstową/html z ograniczoną liczbą znaczników. Próbowałem nawet trzymać się tagów html, które ostatecznie mogły zostać przekonwertowane na rzeczywiste tagi w części tekstowej/html e-maila, ale niestety pozostały one uniknięte ... i to oczywiście byłoby nieco zhakowane.

W każdym razie, dla każdego, kto mógłby zagłębić się w to więcej, chciałem zrobić dodatkowe potwierdzenie, że domyślna funkcja Androida "wyślij e-mail z html" doprowadzi Cię do szaleńczego zbliżenia do tego, czego możesz potrzebować, ale w końcu " Muszę ugryźć bullet i zaimplementować wiele rzeczy niższego poziomu (takich jak Sending Email in Android using JavaMail API without using the default/built-in app, co oznacza, że ​​musisz poradzić sobie z materiałami pw itp.).

Uwaga (później): Zawinęłem SpannableStringBuilder zwrócony z pliku Html.fromHtml niestandardową klasą, która rozszerzyła SpannableStringBuilder i przekazała to do intencji, aby nasłuchiwać wywołań interfejsu Spanned. Okazuje się, że gdy rzeczy są zapisywane do paczki wysyłanej do wiadomości e-mail, TextUtils.writeToParcel wykonuje specjalne sprawdzanie, aby wyodrębnić pogrubienie/kursywę, najpierw sprawdzając, czy CharSequence jest instancją Spanned, a następnie pytając o przęsła (przez spanned.getSpans). Niemniej jednak nie widzę oczywistej nadziei w dokonywaniu modyfikacji, aby uzyskać coś tak prostego, jak obsługa tagów table/td. I nawet próbowałem modyfikować toString() mojej podklasy SpannableStringBuilder, aby zwrócić jakiś surowy html tabeli, aby zobaczyć, co się stanie, ale zostanie ono ujęte gdzieś indziej w procesie pisania paczek.

i więcej (później): TextUtils.writeToParcel (CharSequence cs, działki p ...) będzie, jeśli cs jest instancją "łączony", pisać te przęsła tylko wtedy, gdy zaimplementować interfejs "ParcelableSpan". .. który jest "szczególnym rodzajem paczki dla obiektów, które będą służyć jako rozpiętości tekstu" i "może być użyty tylko przez kod w ramce, nie jest przeznaczony do aplikacji do implementacji własnych działek paczek". Tak więc, nawet jeśli chciałbyś się do tego przyzwyczaić i napisać własny, aby obsługiwać znaczniki tabeli lub cokolwiek innego, wydaje się, że jest to zniechęcone. Chciałbym, żeby człowiek hackbod ważył tu coś oczywistego, co przeoczyłem.

Odpowiedz

11

Działa to dla kilku podstawowych znaczników - pogrubienie, kursywa - ale nie będzie dla niczego jak tabela html.

To najprawdopodobniej funkcja klienta poczty e-mail.Nie wszyscy klienci poczty e-mail mogą tworzyć dowolny kod HTML na dowolnej platformie. Tak więc, podczas gdy Mozilla Thunderbird wydaje się pozwalać ci tworzyć pocztę HTML z tabelą, Gmail tego nie robi (niestety, nie widzę opcji dla niej w oknie dialogowym wiadomości).

Zastanawiam się, czy nie jest bardziej fundamentalne ograniczenie, które zmusi Cię do zrobienia czegoś zupełnie innego

Chyba napisać własny klienta e-mail, rozszerzenie kilka klas potrzebnych do umożliwienia TextView i EditText do obsługi tabel HTML (jest towięcej niż klasa) nic ci nie da.

i zastanawiam się, czy aplikacja Gmail wygląda pod kołdrą, aby zobaczyć co charsequence naprawdę jest i czym może obsługiwać kilka tagów

TextView i EditText może „obsłużyć kilka tagów”, podszewka mniej więcej z tego, co Html może analizować/generować i może reprezentować SpannedString.

Nic z tego nie może obsłużyć tabeli HTML. Ani JavaScript. Ani CSS. Ani iframe ani żadnych innych tagów.

ale w końcu musisz zacisnąć zęby i wdrożyć dużo niższym poziomie rzeczy się

zacząłbym zadając sobie pytanie, czy wysyłanie poczty HTML z tabel bezpośrednio z telefonu Jest tego warte. Możesz wysyłać pocztę HTML z tabelami z serwera za pomocą interfejsu usługi sieci Web lub wysyłać z serwera wiadomości e-mail w formacie HTML. Żadne z nich nie wymagałoby zebrania "rzeczy pw".

+0

Dzięki Mark za informacje. Nie jestem do tego mocno przekonany, ale wydaje mi się dziwne i dużo "szalonej" dodatkowej pracy (którą rozważam jako ustawienie oddzielnego serwera), aby wysłać nieskomplikowane "ładne" raporty za pośrednictwem poczty elektronicznej. btw - gmail może z pewnością czytać/wyświetlać e-mail w formacie HTML, ale nigdy nie próbowałem go utworzyć z klienta Gmaila w sieci. Mogę po prostu dołączyć plik html używając istniejącego mechanizmu intencji z EXTRA_STREAM ... i poradzić sobie z oczyszczeniem pliku tmp (co jest trudne, ponieważ nie wiesz, kiedy aplikacja e-mail rzeczywiście zakończyła czytanie strumienia!), Itp. – user655489

+1

Uwaga - przyjrzałem się nieco innym kwestiom, aby zobaczyć, co możesz zrobić dzięki ograniczonej funkcjonalności HTML. Niektóre notatki z pełną tabelą obsługiwanych tagów znajdują się tutaj: http://nowherenearithaca.blogspot.com/2011/10/some-notes-for-sending-html-email-in.html. Wszystko sprowadza się do tego, co robi pod Html.fromHtml pod okładkami. Używając , a następnie dla wiersza nagłówka, możesz uzyskać coś, co wygląda "w porządku" po wysłaniu z klienta Gmaila z Gmaila do Gmaila, ponieważ możesz ustawić kolumny tak, aby były dobrze wyrównane. Może być wiele dziwactw dla innych kombinacji wiadomości e-mail! – user655489

+0

@CommonsWare Czy teraz jest obsługiwany tag tabeli? – Dharmendra

Powiązane problemy