Podczas tworzenia wiadomości e-mail należy ustawić typ zawartości na multipart/alternative
podczas wysyłania HTML i TEKSTU lub multipart/mixed
podczas wysyłania TEKSTU i załączników.
Więc co robisz, jeśli chcesz wysłać HTML, tekst i załączniki? Użyj obu?
email
smtp
content-type
mime
Xeoncross
źródło
źródło
Odpowiedzi:
Podjąłem dziś to wyzwanie i uznałem te odpowiedzi za przydatne, ale nie do końca jasne dla mnie.
Edycja : Właśnie znalazłem Apache Commons Email, który ładnie to podsumowuje, co oznacza, że nie musisz o tym wiedzieć poniżej.
Jeśli Twoim wymaganiem jest wiadomość e-mail zawierająca:
Jedyna struktura, która działa z Gmailem / Outlookiem / iPadem, to:
A kod to:
I przykład użycia go w Gmailu
źródło
"<" id-left "@" id-right ">"
.Użyj
multipart/mixed
z pierwszą częścią jakomultipart/alternative
i kolejnymi częściami dla załączników. Z kolei użycietext/plain
itext/html
części wmultipart/alternative
części.Odpowiedni klient poczty e-mail powinien następnie rozpoznać tę
multipart/alternative
część i wyświetlić w razie potrzeby część tekstową lub część html. Powinien również pokazywać wszystkie kolejne części jako części mocowania.Ważną rzeczą do zapamiętania jest to, że w wieloczęściowych wiadomościach MIME posiadanie części w częściach jest całkowicie poprawne. Teoretycznie to zagnieżdżenie może rozciągać się na dowolną głębokość. Każdy klient poczty e-mail o rozsądnych możliwościach powinien być wtedy w stanie rekurencyjnie przetwarzać wszystkie części wiadomości.
źródło
multipart/alternative
prawidłowym zamówieniu podrzędnych części . Ostatni wpis jest częścią o najlepszym / najwyższym priorytecie, więc prawdopodobnie chcesz umieścić tętext/html
część jako ostatnią podrozdział. Zgodnie z RFC1341 .multipart/related
i kiedy tego używać?multipart/alternative
oznacza, że powinna być wyświetlana tylko jedna z dołączonych części - np. Jedna część jest,text/plain
a druga jesttext/html
. Dlatego klient poczty elektronicznej nie powinien wyświetlać obu części, ale tylko jedną. tj. nie są powiązane.multipart/related
wskazuje, że wszystkie części podrzędne są częścią głównej części głównej, np. część główna to,text/html
a części podrzędne to obrazy osadzone. Więcej informacji znajdziesz tutaj .mutt
klienta CLI, aby sprawdzić, czy poprawnie skonfigurowałeś wieloczęściowe wiadomości MIME. Jeśli naciśnieszv
podczas przeglądania wiadomości, wyświetli się ona i umożliwi przeglądanie zagnieżdżonego drzewa części MIME.Wiadomości mają treść. Treść może być tekstowa, html, DataHandler lub Multipart i może być tylko jedna treść. Wieloczęściowe mają tylko BodyParts, ale mogą mieć więcej niż jeden. BodyParts, podobnie jak Messages, mogą mieć treść, która została już opisana.
Wiadomość zawierającą HTML, tekst i załącznik można przeglądać hierarchicznie w następujący sposób:
I kod do zbudowania takiej wiadomości:
źródło
Trafiłem w ten problem. Ta architektura (z odpowiedzi Laina) zadziałała dla mnie. Oto rozwiązanie w Pythonie.
Oto główna funkcja tworzenia wiadomości e-mail:
Oto pełny kod do wysłania wiadomości e-mail zawierającej html / tekst / załącznik:
źródło
Opierając się na przykładzie Iaina, miałem podobną potrzebę tworzenia tych e-maili z oddzielnym tekstem jawnym, HTML i wieloma załącznikami, ale przy użyciu PHP. Ponieważ używamy Amazon SES do wysyłania wiadomości e-mail z załącznikami, API obecnie wymaga od Ciebie zbudowania wiadomości e-mail od podstaw za pomocą funkcji sendRawEmail (...).
Po wielu badaniach (i większej niż zwykle frustracji) problem został rozwiązany, a kod źródłowy PHP został opublikowany, aby pomóc innym, którzy mają podobny problem. Mam nadzieję, że to komuś pomoże - stado małp, które zmuszałem do pracy nad tym problemem, jest teraz wyczerpane.
Kod źródłowy PHP do wysyłania wiadomości e-mail z załącznikami za pomocą Amazon SES.
źródło
$boundary
zawierać całe ciało z załącznikami ale tylko$boundary2
zawierać HTML lub zwykły tekst. Genial rozwiązanie. Powiedz mi proszę, to jest twoje rozwiązanie do wysyłania zwykłego tekstu, czy jest to alternatywna wiadomość, jeśli klient poczty nie obsługuje HTML? Dzięki!Wielka odpowiedź Lain!
Zrobiłem kilka rzeczy, aby ta praca działała w szerszym zestawie urządzeń. Na koniec wymienię klientów, na których testowałem.
Dodałem nowy konstruktor kompilacji, który nie zawierał załączników parametrów i nie używał MimeMultipart („mieszany”). Nie ma potrzeby mieszania, jeśli wysyłasz tylko obrazy w treści.
W metodzie addTextVersion dodałem zestaw znaków przy dodawaniu treści, który prawdopodobnie mógłby / powinien zostać przekazany, ale dodałem go tylko statycznie.
Ostatnim elementem było dodanie do metody addImagesInline. Dodałem ustawienie nazwy pliku obrazu do nagłówka za pomocą następującego kodu. Jeśli tego nie zrobisz, przynajmniej na domyślnym kliencie pocztowym Androida będzie miał wbudowane obrazy o nazwie Nieznane i nie będzie ich automatycznie pobierać i wyświetlać w wiadomości e-mail.
Na koniec jest to lista klientów, na których testowałem. Outlook 2010, Outlook Web App, Internet Explorer 11, Firefox, Chrome, Outlook przy użyciu natywnej aplikacji Apple, Poczta e-mail przechodząca przez Gmaila - klient poczty przeglądarki, Internet Explorer 11, Firefox, Chrome, domyślny klient poczty systemu Android, domyślny klient poczty OSX IPhone, Gmail klient poczty na Androida, klient poczty Gmail na iPhonie, poczta e-mail przechodząca przez Yahoo - klient poczty przeglądarki, Internet Explorer 11, Firefox, Chrome, domyślny klient poczty systemu Android, domyślny klient poczty OSX IPhone.
Mam nadzieję, że to pomoże komukolwiek innemu.
źródło
Oto najlepsze: / mieszany wiadomość mim Multipart z załącznikami i zdjęć inline
I obraz: https://www.qcode.co.uk/images/mime-nesting-structure.png
Schemat wieloczęściowy / powiązany / alternatywny
źródło
Podtyp mieszany
Alternatywny podtyp
Źródło
źródło