Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Nutzung der Mail-Klasse htmlMimeMail5

Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 05.07.2007, 10:17 Nach oben    #1
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.539
Standard [PHP] Nutzung der Mail-Klasse htmlMimeMail5

Dieses Tutorial erklärt die Nutzung einer (bestimmten) Mail-Klasse

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.

Geändert von Jann Hendrik (07.07.2007 um 00:51 Uhr).
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« [PHP] Login-System No.2 | [PHP] vCard PHP Parser »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] PHPUnit oder testgetriebene Entwicklung mepeisen Tutorials 1 06.12.2007 11:56
mail() logging Patch für PHP verfügbar Ben Nachrichten 0 14.12.2006 09:53
Wert Varible in Listener anderer Klasse nutzen??? risa Desktop-Applikationen und Grafik 1 03.04.2006 07:36
[PHP] OOP - eine Einführung MrNiceGuy Tutorials 16 11.11.2005 01:05
[PHP] Ein einfaches Template-System MrNiceGuy Tutorials 0 09.10.2005 18:30


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:00 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.6.7, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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