Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit einer HTML-Mail und verschiedenen Multipart-Blöcken

Einklappen

Neue Werbung 2019

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

  • Probleme mit einer HTML-Mail und verschiedenen Multipart-Blöcken

    Hallo php.de-Gemeinde!

    Nun ist es so weit, ich brauche wirklich eure Hilfe!
    Habe zwar mit php einiges bereits realisiert, doch an dieser Stelle komm ich einfach nicht weiter.

    Ich möchte eine Mail im HTML-Format aus php ( mail(…) ) mit einem eingebettetem Logo und einem PDF-Dokument als Anhang versenden.
    Die Mail wird auch gesendet, doch es treten folgende Probleme auf:

    1. Das Logo wird nicht angezeigt. Der Code des Bildes erscheint einfach mit in der Mail.
    2. Während die Mail in meinem Outlook 2003 „normal“ angezeigt wird, wird sie bei einem Freund (ebenfalls Outlook 2003, keine Filterung ...) bloß als HTML-Quellcode angezeigt.

    Das PDF-Dokument wird allerdings „normal“ im Anhang mitverschickt!

    Vermutlich ist für Punkt 1, ein Fehler in der Verschachtelung der multipart-Blöcke verantwortlich, zum Punkt 2 fällt mir allerdings nichts ein.

    Bitte helft mir, wäre für alles dankbar!!!

    PHP-Code:
    $abgrenzung_1 md5(uniqid(rand())) . '-part-separator-1-';
    $abgrenzung_2 md5(uniqid(rand())) . '-part-separator-2';
    $cid md5(uniqid(rand()));

    // header-attribute
    $xtra "From: $from_email_address < x y z>\r\n";
    $xtra .= "X-Mailer: PHP "phpversion(). "\r\n";

    $xtra .= "MIME-Version: 1.0\r\n";
    $xtra .= "Content-Type: multipart/mixed;
    boundary = \"
    $abgrenzung_1\"\r\n";
    $xtra .= "This is a multi-part message in MIME format";

    // äußere Abgrenzung
    $text "--"$abgrenzung_1"\r\n";
    $text .= "Content-Type: multipart/related;
    boundary =\"
    $abgrenzung_2\"\r\n";

    $text .= "--".$abgrenzung_2."\r\n";
    $text .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
    $text .= "Content-Transfer-Encoding: 8bit\r\n\r\n";

    $text .= 
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
    \"http://www.w3.org/TR/html4/loose.dtd\">
    <html>
    <head>
    <title> xyz </title>
    </head>
    <body>
    <div style=\"border: solid 2px #eeeecb; margin: 0px auto; width: 920px; padding: 10px;\">
    <!-- das Logo, dass nicht angezeigt wird -->
    <img src=\"cid:
    $cid\">".
    // Der eigentlicher mail-content
    $email_text .
    "</div>
    </body>
    </html>"
    "\r\n";

    // ab dieser Stelle erscheint der Quellcode in der Mail!!!
    $text .= "--".$abgrenzung_2."\r\n";

    // das Logo

    $text .= "Content-Type: image/jpeg; name=\"logo.jpg\"\r\n";
    $text .= "Content-Transfer-Encoding: base64\r\n";
    $text .= "Content-ID: <$cid>\r\n\r\n";
    //              $text .= "Content-Disposition: inline; filename=test.jpg\n\n";

    $file "http://www.php.de/images/logo.jpg";
    $attachment fread(fopen($file"r"), filesize($file));
    $attachment chunk_split(base64_encode($attachment));

    $text .= $attachment."\r\n";

      
    $text .= "--".$abgrenzung_2."--\r\n";

      
    $text .= "--".$abgrenzung_1."\r\n";
      
    $text .= "Content-Type: application/pdf; name=\"agb.pdf\"\r\n";
    $text .= "Content-Transfer-Encoding: base64\r\n";
    $text .= "Content-Disposition: attachment; filename=\"agb.pdf\"\r\n\r\n";

    $file "download/agb.pdf";
    $attachment fread(fopen($file"r"), filesize($file));
    $attachment chunk_split(base64_encode($attachment));

    $text .= $attachment."\r\n";

    // abschließende, äußere Abgrenzung
    $text .= "--".$abgrenzung_1."--\r\n";

    $res mail($to_email_address$email_subject$text$xtra); 


  • #2
    Hallo und willkommen,

    bitte benutze [PHP]-Tags zur Syntaxhervorhebung.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Solche Mailsendungen scheitern in der Regel an fehlenden oder fehlerbehafteten Headern. Mach das z.B. mit phpMailer - das hast du mit 10 Zeilen Code fertig.
      PHP-Code:
      if ($var != 0) {
        
      $var 0;

      Kommentar


      • #4
        Zitat von Manko10 Beitrag anzeigen
        Hallo und willkommen,

        bitte benutze [PHP]-Tags zur Syntaxhervorhebung.
        Hallo,
        Danke für den Hinweis! Bin stark sehbehindert und nutze spezielle Anwendungen wie Sprachausgabe (screenreader), daher fällt mir so was wie eine "besondere" Textformatierung nicht wirklich auf. Wird beim nächsten mal darauf achten.

        Gruß

        Kommentar


        • #5
          Okay. Ich habe die Tags im obigen Post mal eingefügt, das ist Leute, die nicht auf Screenreader angewiesen sind, deutlich besser zu lesen.
          Ich würde ehrlich gesagt auch auf phpMailer zurückgreifen. Wenn du das nicht willst, dann nehme dir mal den Quellcode der gesendeten Mail vor. Dort sind Fehler meist leichter zu erkennen als in der PHP-Datei.
          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

          Kommentar


          • #6
            Hi Wolla, Danke für den Hinweis mit PhpMailer, Wahrscheinlich bleibt mir nichts weiter übrig, als die Klasse zu benutzen, würde aber gern selbst nachvollziehen können, warum denn das "verflixte" Ding nicht funktionieren will!
            Vor Allem angesichts der Tatsache, dass es sich hier um ein relativ einfaches Konstrukt handelt.
            Gruß

            Kommentar


            • #7
              Hi Manko10,
              Ich hatte bereits einige Male, mal die von mir generierte Mail -, mal eine äquivalente Mail aus Outlook „seziert“, meine Erkenntnis: Als Differenz fallen mir bloß einige „x-…“ Header von Outlook auf, kann mir aber nicht wirklich vorstellen, dass dies der Grund sein soll.

              Na ja, Ihr habt natürlich recht, eine ausgereifte Lösung sollte schon in der Regel der eigenen Kreation vorgezogen werden.

              Wird mir dann PhpMailer mal genauer ansehen.
              Gruß

              Kommentar

              Lädt...
              X