XaraX: php-mail-attachment geblockt (?)

Beitrag lesen

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.