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

S

sevY

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
 
Zuletzt bearbeitet von einem Moderator:
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";
 
Zuletzt bearbeitet:
Danke, hab ich korrigiert. Daran lag es aber nicht… hatte grad nur die alte Version aus der Datei kopiert…

Yves
 
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?
 
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.
 
Zuletzt bearbeitet:
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
 
muss der letzte boundary nicht mit -- enden?

$message.="--$boundary--\r\n\r\n";
 
Code:
 $chunk=chunk_split(base64_encode($binary  ));
Entferne mal das Leerzeichen hinter $binary, vielleicht codiert der das versehentlich mit?

- björn
 
Zurück
Oben Unten