Ich versuche, eine mehrteilige / verwandte HTML-E-Mail mit eingebetteten GIF-Bildern zu senden. Diese E-Mail wird mit Oracle PL / SQL generiert. Meine Versuche sind fehlgeschlagen. Das Bild wird als rotes X angezeigt (in Outlook 2007 und Yahoo Mail).
Ich habe seit einiger Zeit HTML-E-Mails gesendet, aber meine Anforderungen sind jetzt, mehrere GIF-Bilder in der E-Mail zu verwenden. Ich kann diese auf einem unserer Webserver speichern und nur mit ihnen verknüpfen, aber viele Benutzer-E-Mail-Clients zeigen sie nicht automatisch an und müssen entweder die Einstellungen ändern oder sie für jede E-Mail manuell herunterladen.
Meine Gedanken sind also, das Bild einzubetten. Meine Fragen sind:
- Was mache ich hier falsch?
- Ist der Einbettungsansatz der richtige?
- Gibt es noch andere Optionen, wenn ich immer mehr Bilder verwenden muss? Anhänge funktionieren nicht, da es sich bei den Bildern normalerweise um Logos und Symbole handelt, die aus dem Kontext der Nachricht keinen Sinn ergeben. Außerdem sind einige Elemente der E-Mail Links zu einem Online-System, sodass das Generieren einer statischen PDF-Datei und das Anhängen nicht funktionieren (meines Wissens nach).
Ausschnitt:
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--
Danke vielmals.
Übrigens: Ja, ich habe überprüft, ob die base64-Daten korrekt sind, da ich das Bild in das HTML selbst einbetten kann (unter Verwendung derselben Algo-Verwendung zum Erstellen von Header-Daten) und das Bild in Firefox / IE anzeigen kann.
Ich sollte auch beachten, dass dies NICHT für Spam ist, die E-Mails werden an bestimmte Kunden gesendet, die es täglich erwarten. Der Inhalt ist datengesteuert und keine Werbung.
<img src="URL" />
arbeitete für mich, aber es war ein Bild, das ich außerhalb des Unternehmens gehostet habe. Das funktioniert bei dir nichtAntworten:
Versuchen Sie, es direkt einzufügen. Auf diese Weise können Sie mehrere Bilder an verschiedenen Stellen in die E-Mail einfügen.
Und um diesen Beitrag für andere nützlich zu machen: Wenn Sie keine Base64-Datenzeichenfolge haben, erstellen Sie einfach eine unter: http://www.motobit.com/util/base64-decoder-encoder.asp aus einer Bilddatei .
E-Mail-Quellcode sieht ungefähr so aus, aber ich kann Ihnen wirklich nicht sagen, wofür diese Grenzsache ist:
// EDIT: Oh, ich merke nur, wenn du das erste Code-Snippet aus meinem Beitrag einfügst, um eine E-Mail mit Thunderbird zu schreiben, ändert Thunderbird den HTML-Code automatisch so, dass er fast genauso aussieht wie der zweite Code in meinem Beitrag.
quelle
Die andere Lösung besteht darin, das Bild als Anhang anzuhängen und dann mit cid auf den HTML-Code zu verweisen.
HTML Quelltext:
C # -Code:
quelle
Ich finde keine der Antworten hier nützlich, daher biete ich meine Lösung an.
Das Problem ist, dass Sie
multipart/related
als Inhaltstyp verwenden, was in diesem Fall nicht gut ist. Ich benutzemultipart/mixed
und drinmultipart/alternative
(es funktioniert auf den meisten Clients).Die Nachrichtenstruktur sollte wie folgt aussehen:
Dann wird es funktionieren
quelle
Wenn es nicht funktioniert, können Sie eines dieser Tools ausprobieren, mit denen das Bild in eine HTML-Tabelle konvertiert wird (achten Sie jedoch auf die Größe Ihres Bildes):
quelle
Die Verwendung von Base64 zum Einbetten von Bildern in HTML ist fantastisch. Beachten Sie jedoch, dass Base64-Zeichenfolgen Ihre E-Mail-Größe vergrößern können.
Deshalb,
1) Wenn Sie viele Bilder haben, kann das Hochladen Ihrer Bilder auf einen Server und das Laden dieser Bilder vom Server Ihre E-Mail-Größe verringern. (Sie können viele kostenlose Dienste über Google erhalten)
2) Wenn Ihre E-Mail nur wenige Bilder enthält, ist die Verwendung von base64-Zeichenfolgen definitiv eine großartige Option.
Neben den Auswahlmöglichkeiten, die durch vorhandene Antworten bereitgestellt werden, können Sie auch einen Befehl verwenden, um eine Base64-Zeichenfolge unter Linux zu generieren:
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber die aktuellen Antworten berücksichtigen nicht die Tatsache, dass Outlook und viele andere E-Mail-Anbieter keine Inline-Bilder oder CID-Bilder unterstützen. Der effektivste Weg, Bilder in E-Mails zu platzieren, besteht darin, sie online zu hosten und einen Link dazu in die E-Mail zu setzen. Bei kleinen E-Mail-Listen funktioniert eine öffentliche Dropbox einwandfrei. Dies hält auch die E-Mail-Größe niedrig.
quelle
Sie benötigen 3 Grenzen, damit Inline-Bilder vollständig kompatibel sind.
Alles geht in die
multipart/mixed
.Verwenden Sie dann die
multipart/related
, um Ihremultipart/alternative
und Ihre Bildanhang-Header zu enthalten .Zuletzt fügen Sie Ihre herunterladbaren Anhänge innerhalb der letzten Grenze von
multipart/mixed
.quelle
Es gibt tatsächlich einen sehr guten Blog-Beitrag, der die Vor- und Nachteile von drei verschiedenen Ansätzen für dieses Problem von Martyn Davies auflistet. Sie können es unter https://sendgrid.com/blog/embedding-images-emails-facts/ lesen .
Ich möchte einen vierten Ansatz mit CSS-Hintergrundbildern hinzufügen.
Hinzufügen
an Ihren E-Mail-Text und eine CSS-Klasse wie:
quelle
Für diejenigen, die eine dieser Lösungen nicht zum Laufen bringen konnten: Inline-Bild per E-Mail senden Nach den in der von @ T30 angebotenen Lösung beschriebenen Schritten konnte ich mein Inline-Bild anzeigen lassen, ohne von Outlook blockiert zu werden (frühere Methoden wurden blockiert). . Wenn Sie Exchange wie wir verwenden, dann auch, wenn Sie Folgendes tun:
Sie müssen es Ihrem Exchange-Service-URL-Host übergeben. Abgesehen davon sollten Sie nach dieser Lösung problemlos eingebettete Bilder senden können.
quelle
Es kann von Interesse sein, dass sowohl Outlook als auch Outlook Express diese mehrteiligen Bild-E-Mail-Formate generieren können, wenn Sie die Bilddateien über die Menüfunktion Einfügen / Bild einfügen.
Offensichtlich muss der E-Mail-Typ auf HTML (kein einfacher Text) eingestellt sein.
Jede andere Methode (z. B. Drag & Drop oder Befehlszeilenaufruf) führt dazu, dass die Bilder als Anhang gesendet werden.
Wenn Sie sich dann eine solche E-Mail senden, können Sie sehen, wie sie formatiert ist! :) :)
FWIW, ich suche nach einer eigenständigen ausführbaren Windows-Datei, die Inline-Bilder aus dem Befehlszeilenmodus ausführt, aber es scheint keine zu geben. Es ist ein Pfad, den viele gegangen sind ... Man kann es mit Outlook Express tun, indem man ihm eine entsprechend formatierte EML-Datei übergibt.
quelle
Das Folgende ist Arbeitscode mit zwei Möglichkeiten, um dies zu erreichen:
quelle
Ein zusätzlicher Hinweis zu Pavel Pernas Beitrag, der mir sehr geholfen hat (kann nicht mit meinem Ruf kommentieren, deshalb poste ich dies als Antwort): In einigen Versionen von Microsoft Exchange wird die Inline-Inhaltsdisposition entfernt ( siehe diesen Beitrag von Microsoft ). Das Bild ist einfach nicht Teil der E-Mail, die der Benutzer in Outlook sieht. Verwenden Sie zur Problemumgehung stattdessen "Content-Disposition: Anhang". Outlook 2016 zeigt keine Bilder als Anhang an, die in der E-Mail-Nachricht verwendet werden, obwohl sie die "Inhaltsdisposition: Anhang" verwenden.
quelle
Wenn Sie mit Outlook ein statisches Bild mit Hyperlink senden, können Sie auf einfache Weise Word verwenden.
quelle