Mails mit Bildern - HTML Mails mit Inline-Attachments

<?php
    // eMail-Adresse des Mail-Empfängers
    $to = "Empfaenger <empfaenger@domainname.de>";

    // eMail-Adresse vom Absender
    $from = "Absender <absender@domainname.de>";

    // Mailtext im Plain-Format (deutscher und englischer Text untereinander)...
    $plain = "Über die Anmeldung
------------------
Hier finden Sie Informationen zu Ihrem neuen Account.


About Registration
------------------
Here you find more information about your account.
";
    // Inhalt nach Quoted-Printable konvertieren
    $plain = imap_8bit ($plain);

    // und im HTML-Format (mit eingebettetem Logo und Flaggen zum Anklicken, die
    // zur jeweiligen Sprachversion führen).
    $html = "
<html>
    <head>
        <title>Titel der Seite</title>
    </head>
    <body>
        <img alt=\"EvoComp Logo\" src=\"cid:logo\" />
        <a href=\"#en\"><img border=\"0\" alt=\"englisch\" src=\"cid:en\" /></a> &bull; <a href=\"#de\"><img border=\"0\" alt=\"Deutsch\" src=\"cid:de\" /></a>
        <a name=\"de\"><h1>Über die Anmeldung</h1>
        <p>Hier finden Sie Informationen zu Ihrem neuen Account.</p>
        <a name=\"en\"><h1>About registration</h1></a>
        <p>Here you find more information about your account.</p>
    </body>
</html>";
    // Inhalt nach Quoted-Printable konvertieren
    $html = imap_8bit ($html);

    // Trenner zur Trennung von Teilbereichen in der Mail
    $boundary = strtoupper (md5 (uniqid (time ())));

    // Plain-Text und HTML-Version der eMail im Header zusammenstellen
    $header = // Header für die Absenderadresse
          "From: $from\r\n" .
          // Angabe der genutzten Mime-Type-Version
          "MIME-Version: 1.0\r\n" .
          // Content-Type, der besagt, dass die eMail mehrere alternative Darstellungen
          // (Quellformate Plain-Text und HTML) enthält. Die Trennung der Versionen erfolgt
          // mittels des in Boundary angegebenen Trennerstrings.
          // Die erste Ebene (Trennung von Plain-Text- und HTML-Version) wird mit dem
          // Suffix _top unterschieden.
          "Content-Type: multipart/alternative; boundary=\"" . $boundary . "_top\"\r\n\r\n" .
          // Einleitung der ersten (Plain-Text) Version unter Angabe der Kodierung und dem
          // Mime-Type (text/html).
          "--" . $boundary . "_top\r\n" .
          "Content-Type: text/plain; charset=\"utf-8\"\r\n" .
          "Content-Transfer-Encoding: quoted-printable\r\n\r\n" .
          // Textversion der Mail.
          $plain . "\r\n" .
          // Einleitung der alternativen Version (Mail im HTML-Code); immernoch erste
          // Ebene.
          "--" . $boundary . "_top\r\n" .
          // Anfang des Unterbereichs, welcher zur Trennung von Teilbereichen den Suffix
          // _sub verwendet (boundary). Als Content-Type wird multipart/related angegeben.
          // Hierdurch wird festgelegt, dass das Dokument weitere Unterelemente (im Beispiel
          // die eingebetteten Bilder) enthällt.
          "Content-Type: multipart/related; boundary=\"" . $boundary . "_sub\"\r\n\r\n" .
          // Einleiten des ersten enthaltenen Elements (das eigentliche HTML-Dokument)
          "--" . $boundary . "_sub\r\n" .
          // Angaben zum verwendeten Mime-Type der HTML-Variante (text/html) und die
          // im HTML-Dokument verwendete Kodierung.
          "Content-Type: text/html; charset=\"utf-8\"\r\n" .
          "Content-Transfer-Encoding: quoted-printable\r\n\r\n" .
          // Einfügen des eigentlichen HTML-Dokuments.
          $html . "\r\n";

    // Erster Inline-Anhang ist ein Logo
    $header .=  // Auch hier wieder Einleitung des Attachments durch ein Trennerstring
            "--" . $boundary . "_sub\r\n" .
            // Vergabe eines eindeutigen Namens (id), unter dem das eingebettete
            // Element im HTML-Code angesprochen werden kann.
            "Content-ID: <logo>\r\n" .
            // Mime-Type des Objekts (hier ein JPG-Bild mit Mime-Type image/jpg)
            "Content-Type: image/jpg\r\n" .
            // Festlegung der Kodierung in Base64, da das Bild binäre Daten enthält
            "Content-Transfer-Encoding: base64\r\n" .
            "Content-Disposition: inline; filename=\"logo.jpg\"\r\n\r\n" .
            // Anhängen der zuvor kodierten Bilddatei, die aus dem Dateisystem des Webservers
            // entnommen wird.
            chunk_split (base64_encode (fread (fopen($_SERVER['DOCUMENT_ROOT'] . '/pic/logo_evocomp.jpg',"r"), filesize ($_SERVER['DOCUMENT_ROOT'] . '/pic/logo_evocomp.jpg'))));

    // Als nächstes Inline-Attachment wird ein Bild eingefügt, welches eine englische Flagge darstellt
    $header .= "--" . $boundary . "_sub\r\n" .
           "Content-ID: <en>\r\n" .
           "Content-Type: image/gif\r\n" .
           "Content-Transfer-Encoding: base64\r\n" .
           "Content-Disposition: inline; filename=\"en.gif\"\r\n\r\n" .
           chunk_split (base64_encode (fread (fopen($_SERVER['DOCUMENT_ROOT'] . '/pic/en.gif',"r"), filesize ($_SERVER['DOCUMENT_ROOT'] . '/pic/en.gif'))));

    // Das letzte Attachment stellt eine deutsche Flagge dar
    $header .= "--" . $boundary . "_sub\r\n" .
           "Content-ID: <de>\r\n" .
           "Content-Type: image/gif\r\n" .
           "Content-Transfer-Encoding: base64\r\n" .
           "Content-Disposition: inline; filename=\"de.gif\"\r\n\r\n" .
           chunk_split (base64_encode (fread (fopen($_SERVER['DOCUMENT_ROOT'] . '/pic/de.gif',"r"), filesize ($_SERVER['DOCUMENT_ROOT'] . '/pic/de.gif'))));

    // Letzter eingebetteter Bereich der HTML-Version erreicht
    $header .= "--" . $boundary . "_sub--\r\n";

    // Abschluß der HTML-Version in erster Ebene
    $header .= "--" . $boundary . "_top--";

    // Betreff zur eMail definieren...
    $subject = "Ihre Anmeldung bei uns";

    // und am Ende des Scripts die zusammengestellte eMail versenden.
    mail ($to, $subject, '', $header);
?>

¬ Tutorials



¬ Insolvenzrecht