1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PHP mail() , unerwünschte 0kb Datei im Anhang (ATT01234.txt)

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von sevY, 03.03.2005.

  1. sevY

    sevY Thread Starter

    Hi zusammen,


    ich konkateniere mir wie folgt einen header um diese per PHP mittels mail() zu versenden:

    PHP:
    function encodeImage($image)
            {
            
    $handler=fopen($image,"r");
            
    $binary=fread($handler,filesize($image));
            
    fclose($handler);
            
    $chunk=chunk_split(base64_encode($binary));
            return 
    $chunk;
            }
            
        
    $boundary=md5(uniqid(time()));
        
    $header="From:".utf8_decode($_POST['fromname'])."<".utf8_decode($_POST['fromaddress']).">\r\n";
        
    $header.="Reply-To: ".utf8_decode($_POST['fromaddress'])."\r\n"
        
    $header.="X-Mailer: PHP/" .phpversion(). "\r\n";          
        
    $header.="X-Sender-IP: ".$_SERVER["REMOTE_ADDR"]."\r\n";
        
    $header.="MIME-Version: 1.0\r\n";
        
    $header.="Content-Type: multipart/related; boundary=$boundary\r\n";
        
    $header.="--$boundary\r\n";   
        
    $header.="Content-Type: text/html; charset=iso-8859-1\r\n";
        
    $header.="Content-Transfer-Encoding: 8bit\r\n";
        
    $message="--$boundary\r\n";
        
        
    $message.=$htmlcode."\r\n";
        
        
    $message.="--$boundary\r\n";
        
    $message.="Content-Type: image/jpeg; \r\n name=ecard.jpg\r\n";
        
    $message.="Content-Transfer-Encoding: base64\r\n";
        
    $message.="Content-ID: <ecard.jpg>\r\n";
        
    $message.="Content-Disposition:inline;filename=ecard.jpg\r\n\r\n";
        
    $message.=encodeImage('ecard/erfurt'.utf8_decode($_POST['ecardID']).'.jpg')."\r\n\r\n";
        
    $message.="--$boundary\r\n\r\n";
        
        if(
    mail(utf8_decode($_POST['toname'])."<".utf8_decode($_POST['toaddress']).">",utf8_decode($_POST['fromname'])." hat Ihnen eine eCard geschrieben!",$message,$header))
            {
            echo 
    true;
            }


    Soweit auch alles in Ordnung, jedoch sieht man unter Outlook Express Windows immer eine leere Datei im Anhang mit Name wie ATT00230.txt

    Scheinbar scheint irgendwas im header auf keinen der beiden definierten Mime-Types zu passen…

    Hat jemand einen Tip?


    Viele Grüße

    Yves
     
  2. simusch

    simusch MacUser Mitglied

    Mitglied seit:
    27.09.2004
    Beiträge:
    2.245
    Zustimmungen:
    190
    hi

    kann es daran liegen, dass du in der ersten und zweiten zeile mit $message= das .= vergessen hast?

    PHP:
    $message.="--$boundary\r\n"

    $message.=$htmlcode."\r\n"

    $message.="--$boundary\r\n"
     
  3. sevY

    sevY Thread Starter

    Danke, hab ich korrigiert. Daran lag es aber nicht… hatte grad nur die alte Version aus der Datei kopiert…

    Yves
     
  4. sevY

    sevY Thread Starter

    Ich hab mal PHPmailer von Sourceforge genommen.
    Damit klappt es. Hab keine Lust, da jetzt zu frickeln…

    Mal nebenbei… stimmt es, das viele MailBrowser mit multipart/alternative Types, die zwischen text/html, text/plain und image/jpeg switchen, Probleme haben?
    Also so, das man praktisch alles am besten als HTML senden und dann ans Ende einfach unformatiert „plain text“ anhängt, ohne dafür einen Content-Type zu definieren?
     
  5. wegus

    wegus MacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    15.308
    Zustimmungen:
    1.809
    Zumindest werden Dich viele Virenfilter im Zweifelsfall eher fallenlassen, bei vielen Firmen kommen schon nur noch Textmails durch! multipart/alternative ist eine Sicherheitslücke, weil hiermit Lazycode nachgeladen werden kann.

    Zu Deinem Ursprungsproblem: Ich habe in zwei Skripten ein ähnliches Phänomen und kenne die Lösung auch noch nicht. Da die mails von einem cron-Script an mich gehen, war mir das attachement nat. egal ;) Trotzdem wüßte ich auch gern was da faul ist.
     
  6. sevY

    sevY Thread Starter

    Ok, Danke für die Info.

    Was das Problem angeht… am besten mal den eigenen Code mit dem PHPmailer Code vergleichen… Stück für Stück… naja… ich nutze jetzt standardmäßig PHPmailer… ein geniales Script.
    Einfach ein neues Objekt instanzieren und diesem dann die gewünschten Eigenschaften mitgeben, die Mail am Ende ist ausnahmslos kompatibel!

    Viele Grüße

    Yves
     
  7. databass

    databass MacUser Mitglied

    Mitglied seit:
    21.06.2004
    Beiträge:
    5
    Zustimmungen:
    0
    muss der letzte boundary nicht mit -- enden?

    $message.="--$boundary--\r\n\r\n";
     
  8. [TB]Lucky

    [TB]Lucky MacUser Mitglied

    Mitglied seit:
    17.11.2003
    Beiträge:
    769
    Zustimmungen:
    0
    Code:
     $chunk=chunk_split(base64_encode($binary  ));
    Entferne mal das Leerzeichen hinter $binary, vielleicht codiert der das versehentlich mit?

    - björn