Hallo bmarc,
/* Boundary trennt jeweils die E-Mail-Abschnitte voneinander */
$semi_rand = md5(time());
# es wird nicht abgeprüft, ob der String "\n".$sem_rand."\r\n" im Mailcontent
# vorkommt - bei all den mit uniqid()/rand()/md5() -generierenden Scripts
# die beim googeln gefunden werden, wird dies immer wieder falsch gemacht
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
/* Header wird geschrieben: Absender */
$mail_from = "news@blablabla.blubb";
$mail_header = "From: ".$mail_from;/* Header wird weiter geschrieben: MIME-Version: 1.0, mehrteilige Nachricht */
$mail_header .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary="{$mime_boundary}"";/* mail_message wird, um Angaben vorweg ergänzt, in den Header geschrieben */
$mail_header .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/plain; charset="iso-8859-1"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
# ich sehe keine Routine, die überprüft/umformatiert und dafür sorgt, das
# $mail_message wirklich 7Bit-codiert ist
$mail_message . "\n\n";
/* Das 1. Attachment wird in den Header gesetzt */
$mail_header .= "--{$mime_boundary}\n" .
"Content-Type: {$datei_type};\n" .
" name="{$datei_name}"\n" .
"Content-Disposition: attachment;\n" .
" filename="{$datei_name}"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$attach_data . "\n\n";/* Sofern vorhanden, wird das 2. Attachment in den Header gesetzt */
if ($varAttach2 == true) {
$mail_header .= "--{$mime_boundary}\n" .
"Content-Type: {$datei_type_opt};\n" .
" name="{$datei_name_opt}"\n" .
"Content-Disposition: attachment;\n" .
" filename="{$datei_name_opt}"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$attach_data_opt . "\n\n";
}/* Abschluß des Headers mit '--Boundary--' */
$mail_header .= "--{$mime_boundary}--\n";// ..... Rest-Kram, Mail wird verschickt .......
echo $mail_header
ergibt folgendes Bild:
From: news@blablabla.blubb
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="==Multipart_Boundary_x5348cf10ab6787084aebe24ce96e1560x"This is a multi-part message in MIME format.
// na da läuft wohl einiges schief
--==Multipart_Boundary_x5348cf10ab6787084aebe24ce96e1560x
Content-Type:text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
--==Multipart_Boundary_x5348cf10ab6787084aebe24ce96e1560x
Content-Type: ;
name=""
Content-Disposition: attachment;
filename=""
Content-Transfer-Encoding: base64
// hier ist Content-Type überflüssig
--==Multipart_Boundary_x5348cf10ab6787084aebe24ce96e1560x--
Generell halte ich es für keine gute Idee alles in den von mail() dafür vorgesehenen String 'additional_headers' einzustellen.
Das sind Header:
From:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=""
Alles andere subsummiert sich zu String Message!
Teile, wie
--==Multipart_Boundary_x5348cf10ab6787084aebe24ce96e1560x
Content-Type:text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
sollten immer mit "\r\n" enden und dies aus folgendem Grund.
PHP nutzt zum erstellen der Funktionen mail() und ezmlm_hash() auf *NIX header-Datein der entsprechend zum Einsatz kommenden Sendmail(-Ersatz)-Programme. D. h. was auf einem System funktionieren kann -muß nicht- portierbar sein. Probleme sind mir bei der Portierung eines mittels "\r\n" getennten Teils einer Mail noch nicht aufgefallen.
Gruß aus Berlin!
eddi
Wer Rechtschreibfehler findet, darf sie behalten.