Ankündigung

Einklappen
Keine Ankündigung bisher.

mail() und boundary Problem

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

  • mail() und boundary Problem

    Guten Tag allerseits,

    nach stundenlangem Rumprobieren sitze ich nun an einem Problem, betreffend der PHP Funktionalität mail() und gesendeten Headern; genauer Mails mit "eingebetteten" Bildern.

    Die Mail wird zwar versendet, allerdings sehe ich beim Öffnen der Mail nicht die HTML Mail, SONDERN die Boundary Anweisungen und ich komme da auch nicht weiter.

    Hier mein Code:

    PHP-Code:
    if(preg_match('/@/'$mail)) {
            
    $boundary="=_XXXboundaryXXX";
            
    $empf=$defaul_mail// Empfaenger
            
    $subj="Test"// Betreff
            
    $hdrs="From: ".$mail."\r\n"// Absender
            
    $hdrs.="MIME-Version: 1.0\r\n"// MIME-Version
            
    $hdrs.="Content-Type: multipart/mixed";
            
    $hdrs.="boundary=\"$boundary\";\r\n";
            
    $hdrs.="Content-Transfer-Encoding: 8bit";
            
    $body ="--$boundary\r\n"// Ende des Headers markieren
            // Header fuer den HTML-Teil schreiben
            
    $body .="Content-Type: text/html; charset=\"iso-8859?1\";\r\n";
            
    // NACH dem letzten Header ZWEI Zeilenumbrueche
            
    $body .="Content-Transfer-Encoding: 8bit\r\n\r\n";
            
    // Der HTML-Teil der Mail
            
    $body.="<html><head><title></title>
                    </head>
                    <body>
                    <table width=\"300\">
                    <tr><td colspan=\"2\">
                    
                    <img src=\"cid:bild1\">
                    </td></tr>
                    <tr>
                    
                    <td><img src=\"cid:bild2\"></td>
                    <td>PHP ist eine tolle Sache!</td>
                    </tr>
                    <tr><td colspan=\"2\">
                    
                    <img src=\"cid:bild1\">
                    </td></tr>
                    </table>
                    </body>
                    </html>\r\n"
    ;
            
    $body.="--$boundary\r\n"// HTML-Teil beenden
            // Erste Grafik einfuegen
            
    grafik_einfuegen ("bild1","Images/Layout/nav_pfeil_gruen_o.gif",$body);
            
    $body.="--$boundary\r\n"// Erste Grafik beenden
            // Zweite Grafik einfuegen
            
    grafik_einfuegen ("bild2","Images/Layout/nav_pfeil_gruen.gif",$body);
            
    $body.="--$boundary--\r\n\r\n";// Zweite Grafik beenden
            
    if(false==mail ($empf,$subj,$body,$hdrs))
            {
                die (
    "Konnte Mail nicht senden");
            }
        } 
    Die beiden Funktionen:

    PHP-Code:
    // Liest die Grafik ein und kodiert sie nach Base64
    function bild_einlesen($bild_name)
    {
       
    // Datei einlesen
       
    $bild=file_get_contents($bild_name);
       
    // Nach Base64 kodieren
       
    $b64_kodiert=base64_encode($bild);
       
    // Zeilenumbrueche einfuegen
       
    $b64_kodiert=chunk_split($b64_kodiert,76,"\r\n");
       return (
    $b64_kodiert);
    }
    // Fuegt die Grafik $name in $body ein
    function grafik_einfuegen($cid$name, &$body)
    {
       
    $body.="Content-Type: image/gif; name=\"$name\"\r\n";
       
    $body.="Content-Transfer-Encoding: base64\r\n";
       
    // Schreibt die Content-ID in den Header der Grafik
       // Ueber diese URL kann die Grafik in HTML genutzt werden
       
    $body.="Content-ID: $cid\r\n\r\n"// Ende der Header
       
    $body.=bild_einlesen($name);

    Ich schätze das problem entsteht durch fehlende Angaben/falsche Angaben in den Headern. Das aktuell hier vorliegende Script ist teilweise mit einem Buch entstanden, aber angepasst worden. Beim eigentlichem Buchscript erhalte ich auch den selben Fehler.

    Bin für Tips/Bugfixes oder mehr Infos dankbar.

    mfg


  • #2
    Warum wird das Rad eigentlich immer wieder neu erfunden? Es gibt so hervorragende Klassen wie phpMailer, damit ist das alles kein Problem. Siehe http://phpmailer.sourceforge.net

    Gruß
    phpfan

    Kommentar


    • #3
      Wenn Du die von phpfan genannte Klasse nicht nutzen wollen solltest - warum
      auch immer, zeige doch bitte den erzeugten Quelltext. Damit lässt sich der Fehler
      sicherlich schneller und einfacher finden.

      Kommentar


      • #4
        Hab die Klasse genutzt, funzt damit einwandfrei

        Warum ich das Rad neu erfinden wollte?
        Weil die Klasse und andre Anwendungen, z.b. von pear, viel zu umfangreich für meine Bedürfnisse sind/waren. Das laden einer kompletten klasse von 46kb dauert länger, als das Laden von 5kb code aus meinem Script...

        Kommentar


        • #5
          wen es interessiert, bei mir klappt das hervorragend so:

          PHP-Code:
          $mail_header "From: $von";
          /* boundary */
          $boundary strtoupper(md5(uniqid(time())));

          /* MIME-mail-header */
          $mail_header .= "\nMIME-Version: 1.0";
          $mail_header .= "\nContent-type: multipart/mixed; boundary=$boundary";
          $mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";

          /* Hier faengt der normale Mail-Text an */
          $mail_header .= "\n--$boundary";
          $mail_header .= "\nContent-type: $content_type_s";
          $mail_header .= "\nContent-Transfer-Encoding: 8bit";
          $mail_header .= "\n\n$mail_content";

          /* Hier faengt der Datei-Anhang an */
          $mail_header .= "\n--$boundary";
          $mail_header .= "\nContent-type: $anhang_content_type; name=\"$dateiname\"";
          /* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
          $mail_header .= "\nContent-Transfer-Encoding: ".$encoding;
          $mail_header .= "\nContent-Disposition: attachment; filename=\"$dateiname\"";
          $mail_header .= "\n\n$datei_content";

          /* Gibt das Ende der eMail aus */
          $mail_header .= "\n--$boundary--"
          $content_type_s = "text/html" oder "text/plain"
          $mail_content ist der eigentliche mailtext (html-text)
          $anhang_content_type = "image/gif" oder was da halt drann hängt
          $dateiname = name des attachments, wie er angezeigt werden soll
          gruss sys

          Kommentar

          Lädt...
          X