PHP PDF Attachment verschicken

JaEgErmEistEr

Registered User
Guden,

ich hoffe ihr könnt mir helfen. Habe ein Script welches eine Mail mit PDF im Anhang versenden soll.
Leider klappt das nicht, hier ist der source

PHP:
private function mail_attach($filenm,$filesize,$filetype,$file_cont,$to,$subject,$from,$mail_cont) {
            
            $contenttypes = array(
            "text/plain" => array("encoding"=>"8bit"),
            "text/html" => array("encoding"=>"8bit"),
            "image/gif" => array("encoding"=>"base64"),
            "image/jpeg" => array("encoding"=>"base64"),
            "image/png" => array("encoding"=>"base64"),
            "application/x-zip-compressed" => array("encoding"=>"base64"),
            "application/x-gzip" => array("encoding"=>"base64"),
            "application/x-tar" => array("encoding"=>"base64")
            );
            $mail_header = "From: $from";
            
            if($contenttypes[$filetype][encoding]=="base64") $file_cont = chunk_split(base64_encode($file_cont));
            else $file_cont = $file_cont;
            
            
            $boundary = strtoupper(md5(uniqid(time())));
            
            
            $mail_header .= "\nMIME-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";
            $mail_header .= "\nContent-Transfer-Encoding: 8bit";
            $mail_header .= "\n\n$mail_cont";
            
            $mail_header .= "\n--$boundary";
            $mail_header .= "\nContent-Type: $filetype; name=\"$filenm\"";
            
            $mail_header .= "\nContent-Transfer-Encoding: ".$contenttypes[$filetype][encoding];
            $mail_header .= "\nContent-Disposition: attachment; filename=\"$filenm\"";
            $mail_header .= "\n\n$file_cont";
            
            $mail_header .= "\n--$boundary--";
            
            if(mail($to,$subject,$mail_cont,$mail_header)) {
                return '<br /><span style="color:green;">Erfolgreich verschickt!</span>';
            } else {
                return '<br /><span style="color:red;">Fehler beim verschicken!</span>';
            }
        }

Ich geh über text/plain also 8 bit ... oder muss ich da was anderes wählen?
Hoffe Ihr könnt mir helfen
 
Entweder die mail besteht nur aus der PDF, dann sollte sie auch so deklariert sein.
Oder sie enthält eine PDF als Attachment - dann ist sie aber Multipart (ggf. mit fast leerem Textteil).
 
Heißt im Klartext bitte?
Die PDF wird doch als Attachment deklariert

PHP:
       $mail_header .= "\nContent-Transfer-Encoding: ".$contenttypes[$filetype][encoding];
            $mail_header .= "\nContent-Disposition: attachment; filename=\"$filenm\"";
            $mail_header .= "\n\n$file_cont";

E-Mail Text ist ein anderer
 
Nein, Du bringst die Inhalte durcheinander.
Hier wird erst der Attachment per Mail-Header injiziert und dann erst der Body (per mail-Funktion) angehängt. Dies ist dann kein Attachment mehr sondern ein Durcheinander.
Du brauchst lediglich die MIME-Version und den ersten Content-Type mit der Definition des Boundary in den Header setzten.
Der ganze Rest kommt in den Mail-Body. Vergiss nicht Deinen Klartext-Body ebenfalls in Boundary's zu setzten.

Oder viel einfacher:
Nutze eine der vielen vielen PHP-Mail-Libraries (z.B. Pear-Mail).
Die können das mit wenigen Zeilen umsetzten.

huschi.
 
Back
Top