• Nutzung der Mail-Klasse htmlMimeMail5

    Dieses Tutorial soll den Einstieg in den Umgang mit einer Mail-Klasse erleichtern. Ziel ist nicht, dass ihr nur diese eine benutzen könnt. Das Prinzip anderer Mail-Klassen dürfte ähnlich sein.
    Ggf. regt es auch dazu an, dass ihr euch eine eigene schreibt, die euren indiviuellen Bedürfnissen entspricht.


    Ich gehe bei diesem Tutorial explizit von der Klasse htmlMimeMail5 aus, welche PHP5 voraussetzt!
    Veröffentlich wurde die Klasse unter GNU GPL V2, so dass imho eine individuelle Anpassung möglich ist.

    Beschreibung: http://www.phpguru.org/static/htmlMimeMail5.html
    download: http://www.phpguru.org/downloads/html.mime.mail


    Inhalt:



    Instanz (up)
    Klar, als erstes muss die mail-Klasse eingebunden werden:
    PHP-Code:
    <?php
      
    require_once("mail/htmlMimeMail5.php");
    ?>
    Dann muss sie instanziert werden:
    PHP-Code:
    <?php
      
    require_once("mail/htmlMimeMail5.php");

      
    $mail = new htmlMimeMail5();
    ?>
    Nun zu den wesentlichen 4 Dingen: Absender, Betreff, Empfänger und der eigentliche Inhalt der Mail.
    Doch der Reihe nach:


    Absender (up)
    Der Absender lässt sich wie folgt festlegen:
    PHP-Code:
    <?php
      $mail
    ->setFrom("Hans Mustermann <hans@mustermann.tld>");
    ?>
    Selbstverständlich aktzeptiert die Mail-Klasse anstelle dessen auch den Absender in der Form, dass nur die E-Mail-Adresse angegeben wird:
    PHP-Code:
    <?php
      $mail
    ->setFrom("hans@mustermann.tld");
     
    ?>
    Betreffzeile (up)
    Die Betreffzeile legt man so fest:
    PHP-Code:
    <?php
      $mail
    ->setSubject('Betreffzeile der E-Mail');
    ?>
    Der Inhalt der Mail (up)
    Der Inhalt wird mit folgender Methode festgelegt:
    PHP-Code:
    <?php
      $mail
    ->setText("Lieber Empfänger,\r\ndies ist eine E-Mail.");
    ?>
    Absenden (up)
    und schon könnte man die E-Mail losschicken:
    PHP-Code:
    <?php
      $mail
    ->send(array('erika@mustermann.tld'));
    ?>
    Hier erwartet die Klasse den/die Empfänger als array, so dass es somit auch leicht möglich ist, die gleiche E-Mail gleichzeitig an mehrere Empfänger zu versenden:
    PHP-Code:
    <?php
      $to 
    = array();
      
    $to[] = 'max@mustermann.tld';
      
    $to[] = 'erika@mustermann.tld';

      
    $mail->send($to);
    ?>
    Zwischenfazit (up)
    Bis hier wäre das möglicherweise aufwändiger als mail() zu benutzen, aber logischweise kann diese Klasse noch ein wenig mehr.


    HTML-Mail (up)
    Als erstes wäre die Möglichkeit HTML-Mails zu verschicken:
    PHP-Code:
    <?php
      $mail
    ->setHTML('<body><h1>huhu</h1>eine neue E-Mail<br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div><br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div></body>');
    ?>
    Anhänge (up)
    Aber auch Anhänge sind leicht zu verwalten:
    PHP-Code:
    <?php
      $mail
    ->addAttachment(new fileAttachment('datei.zip''application/zip', new Base64Encoding()));
    ?>
    Dabei wird dann von einer weitere Klasse Gebrauch gemacht, die in mit der Datei htmlMimeMail5.php eingebunden wurde.
    Selbstverständlich kann man mehrere Dateien an eine E-Mail anhängen!


    eingebettete Bilder (up)
    Bilder können auch in die Mail eingebaut werden, was gerade für HTML-Mails vorteilhaft ist, da moderne E-Mail-Clients externe Bilder nur nach expliziter Bestätigung zulassen.
    PHP-Code:
    <?php
      $mail
    ->addEmbeddedImage(new fileEmbeddedImage('background.gif''image/gif', new Base64Encoding()));
    ?>
    Eine HTML-Mail, die dieses Bild dann nutzt könnte dann so ausehen:
    PHP-Code:
    <?php
      $mail
    ->setHTML('<body background="background.gif">
    <h1>huhu</h1>
    eine neue E-Mail
    <br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div><br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div></body>'
    );
    ?>
    Priorität (up)
    Man kann die Priorität der E-Mail ändern:
    PHP-Code:
    <?php
      $mail
    ->setPriority('high');
    ?>
    Aktzeptierte Argument sind:
    • high
    • normal
    • low

    oder deren Pendants:
    • 1 (für high)
    • 3 (für normal)
    • 5 (für (low)



    Sendestatus (up)
    Eine Überprüfung, ob mail(s) verschickt werden konnten kann man so realisieren:
    PHP-Code:
    <?php
      
    // senden
      
    $result $mail->send(array('erika@mustermann.tld'));

      
    // Sendestatus
      
    if (!$result)
      {
        echo 
    '<h2>error</h2><pre>';
        
    print_r($mail->errors);
        echo 
    '</pre>Die Mail wurde nicht abgeschickt.';
      }
      else
        echo 
    'E-Mail wurde gesand!';
    ?>
    mail, sendmail und smtp (up)
    Die Klasse bietet drei Möglichkeiten an, seine Mails loszuwerden:
    1. mail
    2. sendmail
    3. smtp

    Standardmäßig wird mail benutzt. Um eine der anderen Arten zu nutzen muss dies als weiterer Parameter beim Aufruf der Methode send angegeben werden.

    Wer sich für SMTP entscheidet, muß vorher die notwendigen Paramter dieser Methode übergeben:
    PHP-Code:
      $mail->setSMTPParams('',        // string $host
                           
    25,       // int $port
                           
    '',        // string $helo
                           
    false,     // bool $auth
                           
    '',        // string $user
                           
    '');       // string $pass 
    Beim Versad über sendmail wird standardmäßig /usr/lib/sendmail -ti verwendet. Dies kann aber selbstverständlich geändert werden:
    PHP-Code:
    <?php
      $mail
    ->setSendmailPath('/pfad/zu/sendmail -parameter')
    ?>
    Zeichenumbruch (up)
    Es kann definiert werden, nach wievielen Zeichen ein Umbruch erzwungen werden soll (im Quellcode der E-Mail
    PHP-Code:
    <?php
      $mail
    ->setTextWrap(50);
    ?>
    Standardmäßig ist hier 998 eingestellt, da dies durch den SMTP-Standard vorgegeben ist.


    CC und BCC (up)
    Kopien und Blindkopien (cc und bcc) sind möglich:
    PHP-Code:
    <?php
      $mail
    ->setCc('kopie@mustermann.tld');
      
    $mail->setBcc('blindkopie@mustermann.tld');
    ?>
    Der ReturnPath lässt sich eingeben:
    PHP-Code:
    <?php
      $mail
    ->setReturnPath('info@mustermann.tld');
    ?>
    header (up)

    Weitere header lassen sich so eingeben:
    PHP-Code:
    <?php
      $mail
    ->setHeader('name''wert');
     
    ?>
    Mögliche header werden zB in der wikipedia aufgeführt.


    charset (up)
    Standardmäßig wird mit dem charset ISO-8859-1 gearbeitet. Dieser läßt sich für die header, den Text- und den HTML-Teil ändern. Die dafür zu benutzenden Methoden sollen hier aber nicht mehr Bestandteil sein.


    Beispiel (up)
    Zum Abschluss noch ein Beispiel, wie die Nutzung dann insgesamt aussehen kann:
    PHP-Code:
    <?php
      error_reporting
    (E_ALL);

      require_once(
    'mail/htmlMimeMail5.php');
      
    $mail = new htmlMimeMail5();

      
    // Absender
      
    $mail->setFrom("Hans Mustermann <hans@mustermann.tld>");

      
    // ReturnPath
      
    $mail->setReturnPath('info@mustermann.tld');

      
    // Betreff
      
    $mail->setSubject('Betreffzeile der E-Mail');

      
    // HTML-mail
      
    $mail->setHTML('<body background="background.gif">
    <h1>Hallo</h1>
    schau mal - wie niedlich!!
    <div align="left"><font color="#C0C0C0">--
    <br>Erika Mustermann
    <br>Heidestraße 17
    <br>München</font></div><br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div><br /><div style="z-index:3" class="smallfont" align="center">SEO by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div></body>'
    );

      
    // Anhang
      
    $attach = new fileAttachment('http://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/200px-Cat03.jpg');
      
    $mail->addAttachment($attach);

      
    // senden
      
    $result $mail->send(array('max@mustermann.tld'));

      
    // Sendestatus
      
    if (!$result)
      {
        echo 
    '<h2>error</h2><pre>';
        
    print_r($mail->errors);
        echo 
    '</pre>Die Mail wurde nicht abgeschickt.';
      }
      else
        echo 
    'E-Mail wurde gesand!';
    ?>
    Fazit (up)
    Ich meine soetwas wie einen kleinen Fehler in der Klasse gefunden zu haben. In der Datei htmlMimeMail5.php habe in Zeile 165 folgendes hinzugefügt:
    PHP-Code:
    $this->headers['Date'] = date('r'); 
    andernfalls kommt zu dem Fehler, dass E-Mails, die mit smtp verschickt werden ein falsches Absendedatum haben.
    Schade finde ich auch, dass die Klasse den Empfänger nur als array annimmt. Hier wäre eine Überprüfung in der Klasse angebracht.

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48