PHP: Erweiterte mail()-Funktion [xmail()]



  • Hallo! Ich habe aus dem Internet folgende Funktion kopiert:

    /*
    $email_address = "Recievers email"; 
    $email_from = "Senders email"; 
    $subject = "Any subject you like!"; 
    $msg = "Text message shown in email"; 
    $attach_filepath = "path to existing picture files. Should be an array!"; 
    */
    function xmail($email_address,$email_from,$subject,$msg,$attach_filepath) { 
           $b = 0; 
           $mail_attached = ""; 
           $boundary = md5(uniqid(time(),1))."_xmail"; 
           if (count($attach_filepath)>0) { 
               for ($a=0;$a<count($attach_filepath);$a++) { 
                   if ($fp = fopen($attach_filepath[$a],"rb")) { 
                       $file_name = basename($attach_filepath[$a]); 
                       $content[$b] = fread($fp,filesize($attach_filepath[$a])); 
                       $mail_attached .= "--".$boundary."\r\n" 
                           ."Content-Type: image/jpeg; name=\"$file_name\"\r\n" 
                           . "Content-Transfer-Encoding: base64\r\n" 
                           . "Content-Disposition: inline; filename=\"$file_name\"\r\n\r\n" 
                           .chunk_split(base64_encode($content[$b]))."\r\n"; 
                       $b++; 
                       fclose($fp); 
                   } else { 
                       echo "Anhang konnte nicht gesendet werden."; 
                   } 
               } 
               $mail_attached .= "--".$boundary." \r\n"; 
               $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"
    Message-ID: ".date(dmYHis)."@domain.net"; 
               $mail_content = "--".$boundary."\r\n" 
                           . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n" 
                           . "Content-Transfer-Encoding: 8bit\r\n\r\n" 
                           . $msg."\r\n\r\n".$mail_attached; 
               return mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header); 
           } else { 
               return mail($email_address,$subject,$msg,"From: ".$email_from); 
           } 
    }
    

    Problem: Dateianhänge erscheinen als "Text" in der EMail. Kann mir jemand sagen, was ich ändern muss, damit Dateianhänge auch wirklich als Datei ankommtn? Ich vermute, dass der Author einen Parameter falsch gesetzt hat, aber ich weiß nicht, welchen und ich hab auch schon probiert es zu verbessern, aber es hat nicht geklappt. 😞

    MfG Windoof



  • Versuch es mal mit

    Content-Disposition: attachment
    

    anstelle von

    Content-Disposition: inline; filename=\"$file_name\"
    


  • Das hilft leider auch nichts... Aber vielleicht hilf ja die Info, wie die EMail aussieht, wenn ich sie erhalte:

    Content-Type: multipart/mixed; boundary="991f4a4e8a908681b856c846ff990d5d_xmail"
    Message-ID: 29012004230125@domain.net
    Date: Thu, 29 Jan 2004 23:01:25 +0100 (CET)
    
    --991f4a4e8a908681b856c846ff990d5d_xmail
    
    Content-Type: text/plain; charset=iso-8859-1; format=flowed
    
    Content-Transfer-Encoding: 8bit
    
    Testdatei
    
    --991f4a4e8a908681b856c846ff990d5d_xmail
    
    Content-Type: image/jpeg; name="test.php"
    
    Content-Transfer-Encoding: base64
    
    Content-Disposition: attachment
    
    PGh0bWw+PGhlYWQ+PHRpdGxlPk5ld3MvUHJlc3NlPC90aXRsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9
    
    ImphdmFzY3JpcHQiPg0KPCEtLQ0KZnVuY3Rpb24gc2hvd2luZm8oaW5mbykNCnsNCiBkb2N1bWVu
    
    dC5nZXRFbGVtZW50QnlJZChpbmZvKS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIjsNCn0NCmZ1
    
    bmN0aW9uIG5vaW5mbyhpbmZvKQ0Kew0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZm8pLnN0
    
    eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7DQp9DQovLy0tPjwvc2NyaXB0Pg0KPGxpbmsgcmVsPSJz
    
    dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibWFpbi5jc3MiPg0KPHN0eWxlIHR5cGU9
    
    InRleHQvY3NzIj4NCjwhLS0NCmRpdiB7IGJvcmRlci1zdHlsZTogb3V0c2V0OyBib3JkZXItd2lk
    
    dGg6IDVweDsgYm9yZGVyLWNvbG9yOiAjMDAwMEQwOyBwb3NpdGlvbjogYWJzb2x1dGU7IHZpc2li
    
    aWxpdHk6IGhpZGRlbjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA5OTsgY29sb3I6ICNmZmZmZmY7
    
    IGZvbnQtZmFtaWx5OiBhcmlhbCwgaGVsdmV0aWNhLCB0YWhvbWEsIHZlcmRhbmE7IGZvbnQtc2l6
    
    ZTogMTBwdDsgd2lkdGg6IDQwMHB4OyB9DQovLy0tPjwvc3R5bGU+DQo8L2hlYWQ+PGJvZHk+DQo8
    
    P3BocA0KJGhhbmRsZT1mb3BlbigkeWVhci4iXyIuJGxhbmcuIi50eHQiLCJyIik7DQokc291cmNl
    
    PWZyZWFkKCRoYW5kbGUsZmlsZXNpemUoJHllYXIuIl8iLiRsYW5nLiIudHh0IikpOw0KZmNsb3Nl
    
    KCRoYW5kbGUpOw0KJGNvdW50PTA7DQokbnI9MDsNCnByaW50ICI8aDE+TmV3cy9QcmVzcyI7IGlm
    
    ICgkbGFuZz09ImQiKSB7IGVjaG8gImUiOyB9IHByaW50ICIgJHllYXI8L2gxPlxuIjsNCiRzb3Vy
    
    Y2U9ZXJlZ19yZXBsYWNlKCI6MToiLCI8YSBocmVmPVwiamF2YXNjcmlwdDpzY2hvd2luZm8oJyIs
    
    JHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjI6IiwiJylcIiBvbk1vdXNlT3Zlcj1c
    
    InNob3dpbmZvKCciLCRzb3VyY2UpOw0KJHNvdXJjZT1lcmVnX3JlcGxhY2UoIjozOiIsIicpXCIg
    
    b25Nb3VzZU91dD1cIm5vaW5mbygnIiwkc291cmNlKTsNCiRzb3VyY2U9ZXJlZ19yZXBsYWNlKCI6
    
    NDoiLCInKVwiPiIsJHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjU6IiwiPC9hPlxu
    
    PGJyPjxkaXYgbmFtZT1cIiIsJHNvdXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjY6Iiwi
    
    XCIgaWQ9XCIiLCRzb3VyY2UpOw0KJHNvdXJjZT1lcmVnX3JlcGxhY2UoIjo3OiIsIlwiPiIsJHNv
    
    dXJjZSk7DQokc291cmNlPWVyZWdfcmVwbGFjZSgiOjg6IiwiPC9kaXY+Iiwkc291cmNlKTsNCnBy
    
    aW50ICIkc291cmNlIjsNCj8+DQo8L2JvZHk+PC9odG1sPg==
    
    --991f4a4e8a908681b856c846ff990d5d_xmail
    

    Also: Er sendet alles als reinen Text.


  • Mod

    Zuviele Linebreaks

    ersetze \r\n mal durch \n



  • Schau dir mal das hier an. Ich habe festgestellt, dass der Aufbau der Mail davon etwas abweicht - evtl. liegt es daran 😕



  • Shade Of Mine schrieb:

    ersetze \r\n mal durch \n

    Hab ich auch probiert, dann kommt die EMail garnicht erst an. Aber trotzdem danke. Ich werd jetzt mal flenders Vorschlag probieren...

    ...Please wait ...



  • Cool, danke ihr beiden! Ihr hattet beide recht, ich muss \r\n durch \n ersetzen und im Header, wo boundary definiert wird, muss dahinter noch ein Semikolon. Danke ihr beiden! Zur Komplettlösung gebe ich nochmal die xmail()-Funktion durch:

    function xmail($email_address,$email_cc,$email_bcc,$email_from,$subject,$msg,$attach_filepath,$want_attach) { 
           $b = 0; 
           $mail_attached = ""; 
           $boundary = "000XMAIL000"; 
           if (count($attach_filepath)>0 && $want_attach) { 
               for ($a=0;$a<count($attach_filepath);$a++) { 
                   if ($fp=fopen($attach_filepath[$a],"rb")) { 
                       $file_name=basename($attach_filepath[$a]); 
                       $content[$b]=fread($fp,filesize($attach_filepath[$a])); 
                       $mail_attached.="--".$boundary."\n" 
                           ."Content-Type: image/jpeg; name=\"$file_name\"\n" 
                           ."Content-Transfer-Encoding: base64\n" 
                           ."Content-Disposition: inline; filename=\"$file_name\"\n\n" 
                           .chunk_split(base64_encode($content[$b]))."\n"; 
                       $b++; 
                       fclose($fp); 
                   } else { 
                       echo "Anhang konnte nicht gesendet werden."; 
                   } 
               } 
               $mail_attached .= "--".$boundary."\n"; 
               $add_header ="MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\";
    Message-ID: <".md5($email_from)."@domain.net>"; 
               $mail_content="--".$boundary."\n" 
                           ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" 
                           ."Content-Transfer-Encoding: 8bit\n\n" 
                           .$msg."\n\n".$mail_attached; 
               return mail($email_address,$subject,$mail_content,"From: ".$email_from."\nCC: ".$email_cc."\nBCC: ".$email_bcc."\nErrors-To: ".$email_from."\n".$add_header); 
           } else { 
               return mail($email_address,$subject,$msg,"From: ".$email_from."\nCC: ".$email_cc."\nBCC: ".$email_bcc."\nErrors-To: ".$email_from);
           } 
    }
    

Anmelden zum Antworten