derterraner: E-Mail mit Anhang versenden Problem

Guten Tag zusammen,

ich verwende den folgenden bekannten Mailcode in leicht abgewandelter Form:

  
?php  
function mail_att($to,$subject,$message,$anhang)  
   {  
   $absender = "Mein Name";  
   $absender_mail = "ich@domain";  
   $reply = "antwort@adresse";  
  
   $mime_boundary = "-----=" . md5(uniqid(mt_rand(), 1));  
  
   $header  ="From:".$absender."<".$absender_mail.">\n";  
   $header .= "Reply-To: ".$reply."\n";  
  
   $header.= "MIME-Version: 1.0\r\n";  
   $header.= "Content-Type: multipart/mixed;\r\n";  
   $header.= " boundary=\"".$mime_boundary."\"\r\n";  
  
   $content = "This is a multi-part message in MIME format.\r\n\r\n";  
   $content.= "--".$mime_boundary."\r\n";  
   $content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n";  
   $content.= "Content-Transfer-Encoding: 8bit\r\n\r\n";  
   $content.= $message."\r\n";  
  
   //$anhang ist ein Mehrdimensionals Array  
   //$anhang enthält mehrere Dateien  
   if(is_array($anhang) AND is_array(current($anhang)))  
      {  
      foreach($anhang AS $dat)  
         {  
         $data = chunk_split(base64_encode($dat['data']));  
         $content.= "--".$mime_boundary."\r\n";  
         $content.= "Content-Disposition: attachment;\r\n";  
         $content.= "\tfilename=\"".$dat['name']."\";\r\n";  
         $content.= "Content-Length: .".$dat['size'].";\r\n";  
         $content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n";  
         $content.= "Content-Transfer-Encoding: base64\r\n\r\n";  
         $content.= $data."\r\n";  
         }  
      $content .= "--".$mime_boundary."--";  
      }  
   else //Nur 1 Datei als Anhang  
      {  
      $data = chunk_split(base64_encode($anhang['data']));  
      $content.= "--".$mime_boundary."\r\n";  
      $content.= "Content-Disposition: attachment;\r\n";  
      $content.= "\tfilename=\"".$anhang['name']."\";\r\n";  
      $content.= "Content-Length: .".$dat['size'].";\r\n";  
      $content.= "Content-Type: ".$anhang['type']."; name=\"".$anhang['name']."\"\r\n";  
      $content.= "Content-Transfer-Encoding: base64\r\n\r\n";  
      $content.= $data."\r\n";  
      }  
  
  
  
  
   if(@mail($to, $subject, $content, $header)) return true;  
   else return false;  
   }  
?>  

Anscheinend liegt hier irgendwo ein Fehler im Detail.

1.) Sende ich mit diesem Script - eine CSV Datei an eine Mail Adresse auf .gmx dann wird die Datei in der Übersicht mit einer Klammer angezeigt öffne ich die Mail dann ist kein Anhang mehr vorhanden und im Text stehen teile des Headers.

Text der Mail so wie es angezeigt wird:

Content-Type: text/html charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Text der Mail... (korrekt)
--------------------------------------------------------------------------------

Content-Disposition: attachment;
filename="2008-09-19_10-09-53-99999.csv";
Content-Length: .;
Content-Type: application/octet-stream; name="2008-09-19_10-09-53-99999.csv"
Content-Transfer-Encoding: base64

JFZLQjsgICAgICAgICAgICAgICAgICAgIDs5OTk5OQ0KJEFQUztCT047MQ0KJEFQUztSNzgwMDsx
OzszMTkuODU7DQo=

<< Ende Text der Mail.

2.) Schaue ich mir die Mail im Internet mit dem Webmail Programm Horde an (gesendet an eine andere Mail Adresse) dann sieht die Mail korrekt aus.

3.) Hole ich die Mail von 1.) oder 2.) mit Microsoft Outlook Express / Microsoft Outlook 2003 ab sieht die Mail aus wie unter 1.) beschrieben aus.

4.) Hole ich die Mail mit Thunderbird ab, dann soll Sie wohl in Ordnung sein. Konnte ich selbst noch nicht testen..

Kann mir hier irgendjemand einen Tipp geben.... Ich bin ratlos. Ich würde sagen das hier evtl. die Erkennung des Trenners der einzelnen Elemente nicht klappt ??

Danke und Gruß

  1. Hi derterraner,

    ehrlich gesagt, ich finde es unnoetig, ein Mailscript zu basteln, die Swiftmailerklasse macht das alles ganz wunderbar und ist einfach zu bedienen.

    Gruss

    Dieter

    1. Hi derterraner,

      ehrlich gesagt, ich finde es unnoetig, ein Mailscript zu basteln, die Swiftmailerklasse macht das alles ganz wunderbar und ist einfach zu bedienen.

      Gruss

      Dieter

      »»
      Hallo Dieter,

      kannst Du mir kurz schreiben wie ich das Programm korrekt bediene ? Gibt es dafür auch eine Deutsche Anleitung ??

      Ist das echt einfacher ?? Scheint mir recht komplex zu sein ?

      Danke und Gruß
      Bernd

      1. Hi!

        Gibt es dafür auch eine Deutsche Anleitung ??

        Ich überlege gerade, wen Du vergessen hast: Justus, Peter oder Bob?

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Hallo,

          Gibt es dafür auch eine Deutsche Anleitung ??
          Ich überlege gerade, wen Du vergessen hast: Justus, Peter oder Bob?

          YMMD!  :-)

          Ciao,
           Martin

          --
          Alleine sind wir stark ...
          gemeinsam sind wir unausstehlich!
    2. n'abend,

      Hi derterraner,

      ehrlich gesagt, ich finde es unnoetig, ein Mailscript zu basteln, die Swiftmailerklasse macht das alles ganz wunderbar und ist einfach zu bedienen.

      hm... Swift muss ich mir per Gelegenheit mal anschauen... Ich setze seit eh und je auf HtmlMimeMail5, was ich an sich sehr angenehm finde.

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  2. Hello,

    $data = chunk_split(base64_encode($dat['data']), .......);  // <-- Umbruch?

    $content.= "--".$mime_boundary."\r\n";
             $content.= "Content-Disposition: attachment;\r\n";
             $content.= "\tfilename="".$dat['name']."";\r\n";
             $content.= "Content-Length: .".$dat['size'].";\r\n";

    Bezieht sich Content-Length nicht auf die Anzahl zu übertragener Bytes?
    Du beziehst es aber auf den Content in decodierter Form.

    Eine weitere Fehlerquelle sehe ich darin, wie die Übertragung ausgeführt wird.
    Benutzt Du die mail()-Funktion auf einem Linux-Host? Dann ist diese assoziiert mit (verlinkt auf) ein(em) Script, dass meistens sendmail-artig arbeitet. Dann will dieses Script aber die Zeilenumbrüche selber von "\n" auf "\r\n" umbauen.

    In diesem Falle solltest Du durchgängig nur "\n" benutzen.
    Das Script macht dann die RFC-konforme Version daraus.

    Wenn die Übertragung aber durch direkte Übergabe an den SMTP-Service auf Deinem Host stattfindet 8also auf WinDOSen ist das meistens so), dann musst Du die Zeilenumbrüche richtig codieren.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de