base64-codierte Bilder in E-Mail-Signaturen


94

Ich muss einige Bilder (Firmenlogos usw.) in E-Mail-Signaturen einfügen. Ich hatte alle möglichen Probleme mit den eingebetteten Bildern, die vom betreffenden E-Mail-System erstellt wurden (sie werden im Allgemeinen als Anhänge gesendet) und als verknüpfte Bilder (die die Erlaubnis erfordern, sie in der empfangenen E-Mail anzuzeigen).

Ich habe gerade eine E-Mail von Exchange gesehen, die eine base64-Bilddarstellung des Logos enthält und ein Tag für die Anzeige verwendet. Ich suche nach Informationen darüber, wie ich dies nach Möglichkeit in einer E-Mail-Signatur tun kann (wie generiere ich zunächst die base64-Version des Logos und welchen Code benötige ich, damit es funktioniert)?

Ich habe einfache Dinge wie ausprobiert

<body>
<span>
<img src=.... >
</span>
</body>

Aber alles, was ich bekomme, ist der Alternativtext, also mache ich hier offensichtlich etwas falsch.


Antworten:


63

Wichtig

Meine Antwort unten zeigt, wie Bilder mithilfe von Daten-URIs eingebettet werden. Dies ist nützlich für das Web, funktioniert jedoch für die meisten E-Mail-Clients nicht zuverlässig . Lesen Sie für E-Mail-Zwecke unbedingt die Antwort von Shadow2531 .


Base-64-Daten sind in einem imgTag legal, und ich glaube, Ihre Frage ist, wie ein solches Image-Tag richtig eingefügt werden kann.

Sie können ein Online-Tool oder einige Codezeilen verwenden, um die 64-Zeichenfolge zu generieren.

Die Syntax zum Quellen des Bildes aus Inline-Daten lautet:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

http://en.wikipedia.org/wiki/Data_URI_scheme


14
Versuchte dies, aber Google Mail scheint es nicht zu unterstützen. Die Lösung für eingebettete Anhänge scheint jedoch zu funktionieren.
— Indrek

Hallo Tim, es wäre eine große Hilfe, wenn Sie einige Eingaben auf stackoverflow.com/questions/11124540/… bereitstellen könnten . Danke im Voraus. Eine andere Sache ist es eine Auflösung, so dass Mail-Domain wie Yahoo, Google Mail auch Ihre Lösung unterstützen
— M Sach

1
Ich denke, Anhänge (wie die Lösung von @ Shadow2531) sind möglicherweise die am weitesten verbreitete Lösung, aber die einzige Möglichkeit, dies zu wissen, besteht darin, mehrere wichtige E-Mail-Clients mit unterschiedlichen Sicherheitseinstellungen zu testen. Eine weitere Komplikation besteht darin, dass Sie E-Mails sowohl im Internet als auch bei einer Vielzahl von Kunden empfangen können. Beispielsweise verhält sich Google Mail im Web möglicherweise anders als in Outlook oder Thunderbird.
— Tim Medora

Überprüfen Sie diesen Link für die Unterstützung für die Verwendung dieser Technik in Mail - Clients campaignmonitor.com/blog/post/3927/... (tl; dr eine gewisse Unterstützung , aber inkonsequent, besonders in Outlook)
— David Clarke

5
Ist das Einbetten für die meisten E-Mail-Clients im Jahr 2016 immer noch unzuverlässig?
— Eirik Birkeland

128

Das Bild sollte als Anhang wie folgt in die Nachricht eingebettet werden:

--boundary
Content-Type: image/png; name="sig.png"
Content-Disposition: inline; filename="sig.png"
Content-Transfer-Encoding: base64
Content-ID: <0123456789>
Content-Location: sig.png

base64 data

--boundary

Und der HTML-Teil würde das Bild folgendermaßen referenzieren:

<img src="cid:0123456789">

In einigen Clients funktioniert auch src = "sig.png".

Grundsätzlich hätten Sie eine mehrteilige / gemischte, mehrteilige / alternative, mehrteilige / verwandte Nachricht, in der sich der Bildanhang im verwandten Teil befindet.

Clients sollten dieses Image auch nicht blockieren, da es nicht remote ist.

Oder hier ist ein mehrteiliges / alternatives, mehrteiliges / verwandtes Beispiel als mbox-Datei (als Windows-Zeilenumbruchformat speichern und am Ende eine Leerzeile einfügen. Verwenden Sie keine Erweiterung oder die Erweiterung .mbs):

From 
From: from@example.com
To: to@example.com
Subject: HTML Messages with Embedded Pic in Signature
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="alternative_boundary"

This is a message with multiple parts in MIME format.

--alternative_boundary
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

test

-- 
[Picture of a Christmas Tree]

--alternative_boundary
Content-Type: multipart/related; boundary="related_boundary"

--related_boundary
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <p>test</p>
        <p class="sig">-- <br><img src="cid:0123456789"></p>
    </body>
</html>

--related_boundary
Content-Type: image/png; name="sig.png"
Content-Disposition: inline; filename="sig.png"
Content-Location: sig.png
Content-ID: <0123456789>
Content-Transfer-Encoding: base64

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
cHkgSG9saWRheXMgUGFnZQA7

--related_boundary--

--alternative_boundary--

Sie können dies in Sylpheed oder Thunderbird (mit der Erweiterung Import / Export tools) oder den in Opera integrierten Mail-Client importieren. In Opera können Sie dann beispielsweise "Nur Text bevorzugen" umschalten, um den Unterschied zwischen HTML- und Textversion zu erkennen. Wie auch immer, Sie werden sehen, dass die HTML-Version das eingebettete Bild in der Signatur verwendet.


Es wäre eine große Hilfe, wenn Sie einige Eingaben unter stackoverflow.com/questions/11124540/… bereitstellen könnten .
— M Sach

@MSach Werde mal schauen, wenn ich eine Chance bekomme.
— Shadow2531

4
Kannst du mir bei Shadow2531 sagen, wohin der mehrteilige / verwandte Code gehen wird? soll es in der gleichen HTML-Datei sein?
— Faisal Ashfaq

1
"so" ... wie was? Ich bin bei Faisal, wie bringen Sie das in Ihre Nachricht ?
— Devil's Advocate

1
Okay, dieser Kommentar hat mein Verständnis erschüttert. Ich habe eine HTM-Datei erstellt und sie dann in Outlook geladen. Ich habe dann die Funktion "Bild ersetzen" der Signatureditoren verwendet, um eine lokale Datei auszuwählen (anstelle des Base64-codierten Bildes, das ich manuell eingefügt hatte). Dies scheint zu tun, was du meinst. Danke, dass du bei mir bleibst.
— Devil's Advocate

2

Vor kurzem hatte ich das gleiche Problem, QR-Bild / PNG in E-Mail aufzunehmen. Das QR-Bild ist ein Byte-Array, das mit ZXing generiert wird. Wir möchten es nicht in einer Datei speichern, da das Speichern / Lesen aus einer Datei zu teuer (langsam) ist. Die beiden obigen Antworten funktionieren also nicht für mich. Folgendes habe ich getan, um dieses Problem zu lösen:

import javax.mail.util.ByteArrayDataSource;
import org.apache.commons.mail.ImageHtmlEmail;
...
ImageHtmlEmail email = new ImageHtmlEmail();
byte[] qrImageBytes = createQRCode(); // get your image byte array
ByteArrayDataSource qrImageDataSource = new ByteArrayDataSource(qrImageBytes, "image/png");
String contentId = email.embed(qrImageDataSource, "QR Image");

Angenommen, die contentId lautet "111122223333", dann sollte Ihr HTML-Teil Folgendes haben:

<img src="cid: 111122223333">

Das Byte-Array muss nicht in Base64 konvertiert werden, da Commons Mail die Konvertierung automatisch für Sie durchführt. Hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.