Philipp Hasenfratz: HTML E-Mail Aufbau - Mime

Beitrag lesen

Halihallo Markus

ich hab mich etz durch das forum gewuselt, aber bin einfach nicht den entscheidenden schritt weiter gekommen. es geht darum, dass ich eine mail verschicken will, die einen text und einen html teil beinhaltet. ferner sollen die bilder integriert werden.

Mit was willst du diese Mail versenden?

was ich bräuchte ist mal ein kleiner beispiel aufbau. ich versteh einfach nicht, wo und wie ich die diese ganzen tags wie, text/html text/plain multipart/alternative etc. unterbring.

Zuerst: Was ist eine e-mail?
Eine E-Mail ist kein HTML, kein Text, kein Bild. Es hat eine ganz
eigene Form. Die einfachste sieht etwa so aus:

From: me@me.org
To: you@you.org
Subject: Betreffszeile
Content-Type: text/html

hello you.

Jede E-Mail besteht aus einem oder mehreren sogenannten
Entities/Parts. Diese enthalten jeweils eine "Information", also z.B.
ein Bild, den HTML-Code der Mail oder den Text-Part. Diese Entities
können verschachtelt sein. Das Mail von oben besteht z.B. aus nur
einem Entity, dem Top-Entity, welches im Header die Absender und
Empfängeradresse speichert, im Body (getrennt vom Header durch zwei
Leerzeilen [CRLFCRLF]) entweder Text oder HTML (definiert durch den
Content-Type Header).

Oder aber, die Mail besteht aus verschachtelten Entities, wie dies in
deinem Falle etwa so aussieht:

Top-Entity (multipart/alternative)
  |
  +-- Text (text/plain)
  |
  +-- HTML+Ressourcen (multipart/related)
        |
        +-- HTML-Code (text/html)
        |
        +-- ein eingebettetes Bild (image/gif)
        |
        +-- ein zweites Bild (image/png)

Hier wird jeder Entity ein sogenannter Boundary zugewiesen, so dass
der Mail-Client (Outlook, thebat, ...) die Verschachtelung überhaupt
"dekodieren" kann.
Derartig hochverschachtelten Mails würde ich nicht umbedingt per
Hand erstellen, hier helfen die kleinen Helferlein (Perl, PHP, ...).

nur wie sieht das ganze dann in einer html datei aus? wie bau ich diese struktur darin auf? ich hab meine html datei im editor offen, was muss ich wie und an welcher stelle einfügen?

Jetzt solltest du verstanden haben, dass dies absolut gar nichts mit
HTML zu tun hat, denn mit dem sogenannten MIME (Multipurpose
Internet Mail Extensions). http://www.mhonarc.org/~ehood/MIME/

Prinzipiell geht es bei E-Mails nur um ganz normale Text-Daten.
Text-Daten aber, die ein ganz bestimmtes Format haben (ein Format,
eben, welches eben von jedem Mail-Client gelesen werden kann).

ich möchte das ganze nicht mit php realisieren.

dann gebe ich dir unten halt den Beispielcode in Perl ;-)

als was muss ich die datei dann abspeichern? *.eml?

.eml, meinetwegen. Hauptsache dein Mail-Client öffnet das Ding. Warum
willst du es denn abspeichern? - Zweckbindender wäre senden.

es wärte absolute klasse, wenn mir jemand einfach eine mini html datei schicken könnte, in der der aufbau und das einbinden einer beispielgrafik steht. das würde mir erheblich weiter helfen.

Beispiel-Code für Perl:
#!/usr/bin/perl

use strict;
use warnings;

use MIME::Lite;

my $hauptEntity = MIME::Lite->new(
From => '"me" from@me.org',
To => '"you" to@you.org',
Subject => 'Eine Test E-Mail',
Type => 'multipart/alternative',
);

my $textEntity = $hauptEntity->attach(
Type => 'text/plain',
Data => 'Dies erscheint bei Mail-Clients ohne HTML-Unterstützung',
);

my $htmlEntity = $hauptEntity->attach(
Type => 'multipart/related',
);

$htmlEntity->attach(
Type => 'text/html',
Data => '<html><head></head><body style="font-face: Arial, Helvetica, sans-serif; font-size: 16pt">Dies erscheint bei Mail-Clients mit
  HTML-Unterstützung. Sieh da:<br /><br /><img src="cid:<test>" /></body></html>',
);

my $gif = $htmlEntity->attach(
Type => 'image/gif',
Path => '/path/to/a/gif_file.gif',
);

$gif->attr( 'Content-Id' => '<test>' );

open(F, '>./mail.eml') || die("cannot open mail.eml! $@");
print F $hauptEntity->as_string;
close(F);

----

und ausgegeben würde dir folgende mail.eml:

Content-Transfer-Encoding: binary
Content-Type: multipart/alternative; boundary="_----------=_110975836530120"
MIME-Version: 1.0
X-Mailer: MIME::Lite 3.01 (F2.71; A1.58; B2.12; Q2.03)
Date: Wed, 2 Mar 2005 10:12:45 UT
From: "me" from@me.org
To: "you" to@you.org
Subject: Eine Test E-Mail

This is a multi-part message in MIME format.

--_----------=_110975836530120
Content-Disposition: inline
Content-Length: 55
Content-Transfer-Encoding: binary
Content-Type: text/plain

Dies erscheint bei Mail-Clients ohne HTML-Unterstützung
--_----------=_110975836530120
Content-Transfer-Encoding: binary
Content-Type: multipart/related; boundary="_----------=_110975836530121"

This is a multi-part message in MIME format.

--_----------=_110975836530121
Content-Disposition: inline
Content-Length: 206
Content-Transfer-Encoding: binary
Content-Type: text/html

<html><head></head><body style="font-face: Arial, Helvetica, sans-serif; font-size: 16pt">Dies erscheint bei Mail-Clients mit
  HTML-Unterstützung. Sieh da:<br /><br /><img src="cid:<test>" /></body></html>
--_----------=_110975836530121
Content-Disposition: inline; filename="gif_file.gif"
Content-Id: <test>
Content-Transfer-Encoding: base64
Content-Type: image/gif; name="gif_file.gif"

[base64 codierter Inhalt von gif_file.gif, stripped]

--_----------=_110975836530121--

--_----------=_110975836530120--

Viele Grüsse (das gehört jetzt nicht mehr zur E-Mail, sondern
              schliesst das Posting ab)

Philipp