mail() mit 2 Attachments versenden

WiZdooM

Erfahrenes Mitglied
Hallo,

Ich versuche seit ein paar Stunden erfolglos 2 Attachments mit der Standardmail-Funktion zu versenden. Die Email hört nach dem 1. Attachment einfach auf, so als ob der Code zum Erzeugen nicht existent wäre.

Wenn ich jetzt nicht total den Wald vor lauter Bäumen übersehe, dann ist alles enthalten was eine Mail mit 2 Attachments enthalten sollte. Ich habe mir dazu mit thunderbird eine testmail mit 2 Attachments gesendet und keine Unterschiede feststellen können, außer dass TB die Content-Disposition auf inline setzt.

PHP:
    $mail_header = "From:".$from."\n";
    $mail_header .= "X-Priority: 1 (Highest)\n";
    $mail_header .= "X-MSMail-Priority: High\n";
    $mail_header .= "MIME-Version: 1.0";
    $mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
    $mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
    $mail_header .= "\n--$boundary";
    $mail_header .= "\nContent-Type: text/plain; charset=ISO-8859-1";
    $mail_header .= "\nContent-Transfer-Encoding: 7bit";
    $mail_header .= "\n\n$message";
    $mail_header .= "\n--$boundary";
    $file_content = fread(fopen($file1,"r"),filesize($file1)); # Datei einlesen
    $file_content = chunk_split(base64_encode($file_content)); # Inhalt mit base64 codiert in Stücken einfügen.
    $mail_header .= "\nContent-Type: application/octetstream; name=\"$file_1\"";
    $mail_header .= "\nContent-Transfer-Encoding: base64";
    $mail_header .= "\nContent-Disposition: attachment; filename=\"$file_1\"";
    $mail_header .= "\n\n$file_content";
    $mail_header .= "\n--$boundary--";
    $file_content2 = fread(fopen($file2,"r"),filesize($file2)); # Datei einlesen
    $file_content2 = chunk_split(base64_encode($file_content2)); # Inhalt mit base64 codiert in Stücken einfügen.
    $mail_header .= "\nContent-Type: application/octetstream; name=\"$file_2\"";
    $mail_header .= "\nContent-Transfer-Encoding: base64";
    $mail_header .= "\nContent-Disposition: attachment; filename=\"$file_2\"";
    $mail_header .= "\n\n$file_content2";
    $mail_header .= "\n--$boundary--";

EDIT:
Die Lösung ist so einfach, dass es schon wieder weh tut!

Der Schlüssel ist der Trennstring $boundary.

Für diejenigen die es nicht wussten (so wie ich):
Es gibt eine Art Absatzmarke :
PHP:
$mail_header .= "\n--$boundary";

Dann gibt es noch die EOM-Marke (End Of Mail) :
PHP:
$mail_header .= "\n--$boundary--";

Wenn natürlich die EOM Marke bereits vor dem zweiten Attachment steht, wird die Email logischerweise nach dem 1. Attachment verschickt und der zweite Teil wird ignoriert.

Problem gelöst - Wochenende ich komme.
 
Zuletzt bearbeitet:
Zurück