Der Martin: PHP->HTML-Mail->mit Textversion und einem PDF als Attachment

Beitrag lesen

Hallo,

Hallo zusammen, ich will eine Mail versenden, die neben der HTML-Version auch einen Text anzeigt (falls das mailprogramm HTML nicht erlaubt).

das ist gut, denn wenn man schon Mails im HTML-Format verschickt, sollte man *grundsätzlich* eine Plaintext-Version als Alternative bieten.

Das klappt auch gut. Jetzt soll noch ein Attachment dazu. Die Mail soll ein PDF als Anhang bekommen. Das bekomme ich leider nicht sauber hin.

Du gehst davon aus, dass du das PDF-Attachment im Quelltext einfach hinten anhängen kannst. Das ist aber ein Trugschluss. Man muss die korrekte Schachtelung der Mail-Bestandteile (HTML, Text, Anhang) und deren MIME-Typen beachten, denn sobald eine Mailnachricht mehr als nur Text enthält, muss man die Einzelteile in "Container" verpacken.

Das sieht schematisch dargestellt so aus:

Container multipart/alternative
     Textversion text/plain
     HTML-Versein text/html
  Container Ende

Falls das PDF eine dritte, inhaltlich gleiche Alternative ist, könnte man es in den vorhandenen Container einfügen. Ich verstehe dich aber so, dass das PDF etwas Zusätzliches ist, das nicht anstatt des Textinhalts gelesen werden soll.

Du hast jetzt einfach noch etwas hinten drangeklatscht, obwohl der Container schon beendet ist. Stattdessen musst du die Struktur "aufbohren", denn du hast jetzt eine zweifach geschachtelte Struktur: Der äußere Container enthält zuerst den bisherigen Container mit Text und HTML, und dann noch das PDF. Also ungefähr so:

Container multipart/mixed
     Container multipart/alternative
        Textversion text/plain
        HTML-Versein text/html
     Container Ende
     PDF-Dokument application/x-pdf
  Container Ende

$mailmessage = "$textVersion";

Einen String nochmal in einen String einbetten? Wer macht denn sowas?

$mailmessage .= "Sie erhalten die Mail als reine Textversion, da Ihr Mail-Programm kein HTML zulässt. $textVersion";

Was hat ä hier zu suchen, wenn es doch gar kein HTML ist?

$mailmessage .= "$alltext";

Einen String nochmal in einen String einbetten? Wer macht denn sowas?

// Attachment anhängen
$mailmessage .= "--" .$trenner. "\r\n";
$mailmessage .= "Content-Type: image/jpeg; name="" .$uploadname. ""\r\n";
$mailmessage .= "Content-Transfer-Encoding: base64\r\n";
$mailmessage .= "Content-Disposition: attachment; filename="" .$uploadname. ""\r\n\r\n";
$mailmessage .= chunk_split( base64_encode( file_get_contents( $_FILES['datei']['tmp_name'] ) ) );
$mailmessage .= "\n";

Das ist für sich genommen okay, nur wie angesprochen, muss das *in* den äußeren Container hinein. Übrigens hast du im einleitenden Text von einem PDF als Anhang gesprochen, hier gibst du aber plötzlich image/jpeg als MIME-Type an - wie passt das zusammen?

Ciao,
 Martin

--
Lehrer:  Wieviel ist die Hälfte von 8?
Schüler: Kommt drauf an. Waagrecht 0 und senkrecht 3.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(