Próbuję wysłać wieloczęściową / pokrewną wiadomość e-mail w formacie HTML z osadzonymi obrazami gif. Ten e-mail jest generowany przy użyciu Oracle PL / SQL. Moje próby nie powiodły się, a obraz jest wyświetlany jako czerwony znak X (w programie Outlook 2007 i poczcie yahoo)
Od jakiegoś czasu wysyłam e-maile w formacie html, ale teraz wymagam użycia kilku obrazów gif w e-mailu. Mogę je przechowywać na jednym z naszych serwerów internetowych i po prostu łączyć się z nimi, ale wielu klientów poczty e-mail nie wyświetla ich automatycznie i będą musieli zmienić ustawienia lub ręcznie pobrać je dla każdego e-maila.
Więc myślę o osadzeniu obrazu. Moje pytania to:
- Co ja tu robię źle?
- Czy podejście osadzania jest właściwe?
- Czy są jakieś inne opcje, jeśli muszę używać coraz więcej obrazów? Załączniki nie będą działać, ponieważ obrazy to zazwyczaj logo i ikony, które nie mają sensu w kontekście wiadomości. Ponadto niektóre elementy wiadomości e-mail są odsyłaczami do systemu online, więc generowanie statycznego pliku PDF i załączanie go nie będzie działać (i tak o ile wiem).
skrawek:
MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"
--a1b2c3d4e3f2g1
content-type: text/html;
<html>
<head><title>My title</title></head>
<body>
<div style="font-size:11pt;font-family:Calibri;">
<p><IMG SRC="cid:my_logo" alt="Logo"></p>
... more html here ...
</div></body></html>
--a1b2c3d4e3f2g1
Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline
[base64 image data here]
--a1b2c3d4e3f2g1--
Wielkie dzięki.
BTW: Tak, zweryfikowałem, że dane base64 są poprawne, ponieważ mogę osadzić obraz w samym html (używając tego samego algo do tworzenia danych nagłówka) i zobaczyć obraz w przeglądarce Firefox / IE.
Powinienem również zauważyć, że NIE jest to spam, e-maile są wysyłane do określonych klientów, którzy oczekują go codziennie. Treść jest oparta na danych, a nie reklamach.
<img src="URL" />
działał dla mnie, ale był to obraz, który umieściłem na serwerze. To ci nie pasuje?Odpowiedzi:
Spróbuj wstawić go bezpośrednio, w ten sposób możesz wstawić wiele obrazów w różnych miejscach w e-mailu.
I aby ten post był przydatny dla innych, aby: Jeśli nie masz ciągu danych base64, utwórz go łatwo pod adresem : http://www.motobit.com/util/base64-decoder-encoder.asp z pliku obrazu .
Kod źródłowy wiadomości e-mail wygląda mniej więcej tak, ale naprawdę nie mogę powiedzieć, do czego służy ta granica:
// EDYCJA: Och, po prostu zdaję sobie sprawę, że jeśli wstawisz pierwszy fragment kodu z mojego postu, aby napisać wiadomość e-mail za pomocą thunderbirda, thunderbird automatycznie zmieni kod HTML, aby wyglądał prawie tak samo jak drugi kod w moim poście.
źródło
Innym rozwiązaniem jest dołączenie obrazu jako załącznika, a następnie odwołanie się do niego w kodzie html za pomocą cid.
Kod HTML:
Kod C #:
źródło
Żadna z odpowiedzi nie jest dla mnie przydatna, więc przedstawiam moje rozwiązanie.
Problem polega na tym, że używasz
multipart/related
jako typu zawartości, co w tym przypadku nie jest dobre. Używammultipart/mixed
i wewnątrzmultipart/alternative
(działa na większości klientów).Struktura wiadomości powinna wyglądać następująco:
Wtedy zadziała
źródło
Jeśli to nie zadziała, możesz wypróbować jedno z tych narzędzi, które konwertują obraz na tabelę HTML (jednak uważaj na rozmiar obrazu):
źródło
Używanie Base64 do osadzania obrazów w html jest niesamowite. Niemniej jednak proszę zauważyć, że ciągi base64 mogą zwiększyć rozmiar wiadomości e-mail.
W związku z tym,
1) Jeśli masz wiele obrazów, przesłanie ich na serwer i załadowanie tych obrazów z serwera może zmniejszyć rozmiar wiadomości e-mail. (Możesz uzyskać wiele bezpłatnych usług za pośrednictwem Google)
2) Jeśli w twojej poczcie jest tylko kilka obrazków, użycie łańcuchów base64 jest zdecydowanie świetną opcją.
Oprócz opcji dostępnych w istniejących odpowiedziach możesz również użyć polecenia do wygenerowania ciągu base64 w systemie Linux:
źródło
Wiem, że to stary post, ale obecne odpowiedzi nie uwzględniają faktu, że program Outlook i wielu innych dostawców poczty e-mail nie obsługuje obrazów wbudowanych ani obrazów CID. Najskuteczniejszym sposobem umieszczania obrazów w wiadomościach e-mail jest udostępnianie ich online i umieszczanie linku do nich w wiadomości e-mail. W przypadku małych list e-mailowych publiczna skrzynka referencyjna działa dobrze. Zmniejsza to również rozmiar wiadomości e-mail.
źródło
Aby obrazy w treści były w pełni zgodne, potrzebujesz 3 granic.
Wszystko trafia do
multipart/mixed
.Następnie użyj,
multipart/related
aby zawrzeć swójmultipart/alternative
i twój obraz załącznika nagłówki.Na koniec umieść załączniki do pobrania w ostatniej granicy
multipart/mixed
.źródło
W rzeczywistości istnieje bardzo dobry wpis na blogu, który wymienia zalety i wady trzech różnych podejść do tego problemu autorstwa Martyn Davies. Możesz go przeczytać na https://sendgrid.com/blog/embedding-images-emails-facts/ .
Chciałbym dodać czwarte podejście wykorzystujące obrazy tła CSS.
Dodaj
do treści wiadomości e-mail i klasy css, takiej jak:
źródło
Dla tych, którzy nie mogli uruchomić jednego z tych rozwiązań: Wyślij obraz w wiadomości e-mail Postępując zgodnie z krokami przedstawionymi w rozwiązaniu oferowanym przez @ T30, udało mi się wyświetlić mój obraz w tekście bez blokowania go przez Outlooka (poprzednie metody były blokowane) . Jeśli korzystasz z wymiany, tak jak my, wtedy również:
będziesz musiał przekazać go hostowi adresu URL usługi wymiany. Poza tym, zastosowanie tego rozwiązania powinno umożliwić łatwe wysyłanie osadzonych obrazów.
źródło
Może być interesujące, że zarówno Outlook, jak i Outlook Express mogą generować te wieloczęściowe formaty wiadomości e-mail, jeśli wstawisz pliki obrazów za pomocą funkcji menu Wstaw / Obraz.
Oczywiście typ wiadomości e-mail musi być ustawiony na HTML (nie jako zwykły tekst).
Każda inna metoda (np. Przeciągnij / upuść lub dowolne wywołanie wiersza poleceń) powoduje wysłanie obrazu (ów) jako załącznika.
Jeśli wyślesz taki e-mail do siebie, zobaczysz, jak jest sformatowany! :)
FWIW, szukam samodzielnego pliku wykonywalnego systemu Windows, który wykonuje obrazy w wierszu z trybu wiersza poleceń, ale wydaje się, że nie ma. To ścieżka, którą przeszło wielu ... Można to zrobić, powiedzmy, Outlook Express, przekazując mu odpowiednio sformatowany plik .eml.
źródło
Poniżej znajduje się działający kod z dwoma sposobami osiągnięcia tego:
źródło
Dodatkowa wskazówka do posta Pavela Perny, która bardzo mi pomogła (nie mogę komentować mojej reputacji, dlatego zamieszczam to jako odpowiedź): W niektórych wersjach Microsoft Exchange, dyspozycja zawartości w treści jest usuwana ( zobacz ten post Microsoft ). Obraz po prostu nie jest częścią poczty, którą użytkownik widzi w Outlooku. Aby obejść ten problem, użyj opcji „Dyspozycja zawartości: załącznik”. Outlook 2016 nie wyświetla obrazów jako załączników, które są używane w wiadomości e-mail, chociaż używają one opcji „Dyspozycja treści: załącznik”.
źródło
Jeśli używasz programu Outlook do wysyłania statycznego obrazu z hiperłączem, prostym sposobem byłoby użycie programu Word.
źródło