mail() verschickt Dateianhänge + nicht lesbare Textdatei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mail() verschickt Dateianhänge + nicht lesbare Textdatei

    Hallo,

    mein Skript soll eine E-Mail mit mehreren Bildern im Anhang versenden. Das klappt auch, wenn ich die E-Mail aber in Outlook abrufe, ist immer noch eine Textdatei mit dran ("ATT00002.txt", auch mit anderen Nummern). Bis auf diese Textdatei lassen sich alle problemlos öffnen. Wie kriege ich diese Textdatei weg? Habe in einem anderen Forum gelesen, dass es mit dem letzten Einfügen des boundary zusammenhängen könnte, genaueres stand da nicht.

    Mein Skript:

    PHP-Code:

      $grenze
    ="grenzlinie";
      
    $header ="From: <info@$seitenname$seitenname\n";
      
    $header.="MIME-Version: 1.0\n";
      
    $header.="Content-Type: multipart/mixed; boundary=\"$grenze\"\n\n";
      
    $header.="--$grenze\n";
      
    $header.="Content-Type: text/html; charset=iso-8859-1\n";
      
    $header.="Content-Transfer-Encoding: 7bit\n\n";
      
    $header.="$nachricht\n";
      
    $header.="--$grenze\r";

      
    $bild="$anfragenr_1.jpg";
      
    $gef=file_exists($bild);
      
    $i=0;
      while(
    $gef)
      {
        
    $i++;
        
    $bild="$anfragenr_$i.jpg";
        
    $gef=file_exists($bild);
        
    $anhang="Bild_$i.jpg";
        if(
    $gef)
        {
          
    $dateiinhalt fread(fopen($bild,"r"),filesize($bild));
          
    $dateiinhalt chunk_split(base64_encode($dateiinhalt));

          
    $header.="\n--$grenze\n";
          
    $header.="Content-Type:image/jpeg; name=\"$anhang\"\n";
          
    $header.="Content-Transfer-Encoding: base64\n";
          
    $header.="Content-Disposition: attachment; filename=\"$anhang\"\n\n";
          
    $header.="$dateiinhalt\n";
          
    $header.="--$grenze";
        }
      }

      
    mail($empf,$betreff,"",$header); 
    Die Zahl der Bild kann >0= und <=6 sein.

    Vielen Dank schonmal!
    Zuletzt geändert von SJoerend; 02.12.2007, 18:40.

  • #2
    Geh mal auf www.phpguru.org. Richard Heyes hat dort seine HTML-Mime-Mail-Klasse für PHP4 und PHP5 zum Download bereitgestellt. Damit ist das mailen kein Problem mehr.
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Danke dafür, sehe ich mir mal an.

      Hat evt. jemand eine Idee, waum mit dem obigen Skript diese zusätzliche, leere Datei verschickt wird? Ich will nur ungern alles umstellen, nur weil evt. irgendwo ein, zwei Zeichen fehlen oder zuviel sind. Ich gehe davon aus, dass es am Skript liegt, dass es einen unsauberen Header erzeugt.

      Kommentar


      • #4
        Fehlt da nicht der Plaintext-Teil?

        Kommentar


        • #5
          Ich verschicke in dieser E-Mail auch eine HTML-Nachricht (siehe vor der Schleife). Nur-Text möchte ich nicht, zumal ich in der eigentlichen Nachricht auch ein Logo mitschicke.

          Kommentar


          • #6
            Afaik musst du alle header, die einen Teil der Email betreffen an den Content übergeben und nicht an die Var welche die Header beinhaltet. In Header kommen nur mailweit gültige Daten rein. Details zu den einzelnen Parts (auch deren Header) und der Inhalt kommen in Content
            PHP-Code:
            $grenze="grenzlinie";
              
            $header ="From: <info@$seitenname$seitenname\n";
              
            $header.="MIME-Version: 1.0\n";
              
            $header.="Content-Type: multipart/mixed; boundary=\"$grenze\"\n\n";
              
            $body ="--$grenze\n";
              
            $body.="Content-Type: text/html; charset=iso-8859-1\n";
              
            $body.="Content-Transfer-Encoding: 7bit\n\n";
              
            $body.="$nachricht\n";
              
            $body.="--$grenze\n\n";

              
            $bild="$anfragenr_1.jpg";
              
            $gef=file_exists($bild);
              
            $i=0;
              while(
            $gef)
              {
                
            $i++;
                
            $bild="$anfragenr_$i.jpg";
                
            $gef=file_exists($bild);
                
            $anhang="Bild_$i.jpg";
                if(
            $gef)
                {
                  
            $dateiinhalt fread(fopen($bild,"r"),filesize($bild));
                  
            $dateiinhalt chunk_split(base64_encode($dateiinhalt));
                  
            $body.="Content-Type:image/jpeg; name=\"$anhang\"\n";
                  
            $body.="Content-Transfer-Encoding: base64\n";
                  
            $body.="Content-Disposition: attachment; filename=\"$anhang\"\n\n";
                  
            $body.="$dateiinhalt\n";
                  
            $body.="--$grenze\n\n";
                }
              }

              
            mail($empf,$betreff,$body,$header); 
            So schonmal probiert?

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Danke, das teste ich natürlich sofort. Aber ich dachte (ich weiß, ich soll das nicht), dass Body und Header sowieso zusammengesetzt werden...

              Über den Ausgang mit deinem Vorschlag berichte ich gleich.

              Kommentar


              • #8
                Das Ergbnis ist leider das gleiche, in der Anlage der E-Mail erscheint immer noch die leere Textdatei (93 Byte).
                Die Bilder sind wie gewünscht alle im Anhang, können auch geöffnet werden.

                Kommentar

                Lädt...
                X