Clever-Excel-Forum

Normale Version: Mail mit eingebetteten Bildern aus Dateien erstellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Liebe Leserin, lieber Leser,

man liest öfter den Wunsch, dass in einer Mail auch Bilder eingebettet werden können.

Dazu gibt es ja viele Beispiele in den Foren...

Zum Beispiel wird ein IMG-Tag (Image) mit einem Link zu einer frei verfügbaren Adresse im Netz verwendet,
oder eine Bilddatei angehängt und mit entsprechendem Code eine cid: mit Verknüpfung zu dieser Bilddatei erstellt.

Oder man fügt ein vorher (per VBA) kopiertes Bild über den Wordeditor einfach in den Body ein. Wobei man hier dann aber auch die genaue Stelle finden muss.

Dass es aber auch anders geht, will ich hier mal an einem Beispiel zeigen...

Im Grunde werden hier auch aufbereitete Bilddaten als Datei mitgeschickt, aber auch gleich ohne weiteren Code die Referenzen gesetzt.

Im Beispiel werden neben einer Kopfgrafik, zwei im Text vorhandene Bilder auch die Signatur mit einer Grafik versehen. Da das Bild neben der Signatur stehen soll brauchen wir dazu noch eine HTML-Tabelle.
Die Bilder können bzgl. der Abmessungen bequem angepasst werden.

Und nun viel Spaß und Erfolg damit.

Code:

Private Sub MailMitBildernSenden()
' Sub sendet eine Mail mit eingebetteten Bildern
  
  With CreateObject("Outlook.Application").CreateItem(0)
     .Getinspector.Display
     .To = "volti@zuhause.de"
     .Subject = "Test the best"
     .htmlbody = SetzeBild("D:\Pictures\CleverExcel.png") & "<br><br>" _
               & "Hallo,<br>hier ist eine Mail." & "<br><br>" _
               & SetzeBild("D:\Pictures\Info.gif", 12, 12) & " Meine erste Info<br>" _
               & SetzeBild("D:\Pictures\Info.gif", 12, 12) & " Meine zweite Info<br>" _
               & "<table border=0><tr><td>" & SetzeBild("D:\Pictures\Rico.bmp", 120, 80) _
               & "</td><td valign='middle'>" & .htmlbody & "</td></tr></table>"
  End With
End Sub

Function SetzeBild(sDatei As String, Optional iHoch As Integer, Optional iBreit As Integer) As String
' Funktion erstellt Daten für ein Bild zur Einbettung in Html
  Dim vData As Variant
  
  With CreateObject("ADODB.Stream")
     .Type = 1  ' adTypeBinary                      ' Binärdatei wird codiert
     .Open                                          ' Stream öffnen
     .LoadFromFile (sDatei): vData = .Read()        ' Binärdaten in Variable einlesen
     .Close                                         ' Stream schließen
  End With
  With CreateObject("MSXml2.DOMDocument").CreateElement("Base64Data")
     .DataType = "bin.base64"
     .nodeTypedValue = vData                        ' Binärdaten holen
     SetzeBild = "<img" _
              & IIf(iHoch > 0, " height=" & iHoch, "") _
              & IIf(iBreit > 0, " width=" & iBreit, "") _
              & " src='data:image/" & Mid$(sDatei, InStrRev(sDatei, ".") + 1) _
              & ";base64," & .Text & "'>"           ' Base64-String holen und Image setzen
  End With
End Function

_________
viele Grüße
Karl-Heinz