Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 8 Mail
  gp 8.1 Mail
  gp 8.2 Mail_Mime
  gp 8.3 Mail_Queue
  gp 8.4 Mail_IMAPv2


Rheinwerk Computing

8.2 Mail_Mime  toptop


Besprochene Version: 1.2.1 Lizenz: PHP
Klassendatei(en): Mail/mime.php

Eine einfache E-Mail zu versenden ist mit PHP kein Problem. Möchten Sie aber eine E-Mail im MIME-Format versenden, was zum Beispiel dann zum Tragen kommt, wenn Sie einen Dateianhang verschicken wollen, dann ist der Aufwand schon recht groß. Die korrekte Kodierung und das Einfügen von Boundaries ist nicht immer unproblematisch.

Mail_mime [Auch wenn es ein wenig ungewöhnlich ist, wird mime wirklich kleingeschrieben. Bitte beachten Sie das beim Inkludieren der Paket-Datei. ] stellt Ihnen Methoden zur Verfügung, um eine Mail entsprechend der MIME-Vorgaben korrekt aufzubauen. Allerdings sind keine Möglichkeiten zum Versand vorgesehen. Dazu können Sie die PHP-Funktion mail() nutzen oder auf PEAR::Mail zurückgreifen.

Die Konstruktor benötigt keine Parameter, Sie können ihm allerdings einen String mit auf den Weg geben, der definiert, wie der Zeilenumbruch darzustellen ist. Im RFC 2045 [http://www.faqs.org/rfcs/rfc2045.html ] ist definiert, dass ein Zeilenumbruch mit einem CRLF (ASCII-Code 13 und 10) dargestellt werden soll. Wenn Sie keinen Parameter übergeben, wird diese Zeichensequenz auch genutzt. Allerdings gibt es immer mal einen Mailserver, der eine andere Kodierung bevorzugt. Falls Sie PEAR::Mail für den Versand nutzen, sollten Sie die Zeilenumbrüche mit '\n' darstellen.

Nachdem Sie ein Mail_mime-Objekt abgeleitet haben, können Sie damit anfangen, die E-Mail zu erstellen. Die Bestandteile einer E-Mail, die nur einmal in einer E-Mail vorkommen können, werden jeweils mit Methoden hinzugefügt, die mit set beginnen. Methoden, die mehrfach aufgerufen werden können, beginnen jeweils mit add.

Der Absender wird an die Methode setFrom() übergeben, und die Betreffzeile können Sie mit setSubject() festlegen. Da eine E-Mail häufig nicht nur an einen Empfänger geschickt wird, können Sie mit den Methoden addCc() und addBcc() noch weitere Empfänger hinzufügen. Bei jedem Aufruf der Methoden kann eine E-Mail-Adresse mit in den Kreis der Empfänger aufgenommen werden. Die Bcc-Variante unterscheidet sich von der Cc-Variante dadurch, dass die Adressen der Bcc-Empfänger den anderen Empfängern nicht mitgeteilt werden.

Auch der eigentliche Inhalt der E-Mail wird mit einer solchen Methode definiert. Allerdings müssen Sie sich an dieser Stelle entscheiden, ob Sie die E-Mail im Text- oder im HTML-Format verschicken wollen. Wenn Sie Ihre Nachricht an setHTMLBody()übergeben, geht das Paket davon aus, dass es sich um eine Mail handelt, die im HTML-Format verschickt werden soll. Bitte beachten Sie, dass es sich dann um ein komplettes HTML-Dokument inklusive aller relevanten Tags handeln sollte.

Die Methode ist auch in der Lage, eine Datei einzulesen. In diesem Fall übergeben Sie als ersten Parameter den Dateinamen und als zweiten Wert true. Die Methode setTXTBody() übernimmt den übergebenen Text als Körper einer Text-E-Mail. Auch ihr können Sie den Namen einer Datei übergeben, die dann automatisch eingelesen wird. Auch hier ist als zweiter Parameter die Konstante true zu übergeben. In diesem Fall können Sie noch einen dritten Wert, der auch vom Datentyp Boolean ist, übergeben, um der Methode mitzuteilen, ob der übergebene Text an einen bestehenden Textkörper angefügt werden soll (true) oder ob der bestehende Text überschrieben wird (false), was der Standardeinstellung entspricht.

Auch das Hinzufügen von Datei-Anhängen ist kein Problem. Der Methode addAttachment() können Sie den Namen einer Datei übergeben, die dann automatisch an die E-Mail angehängt wird. Optional können Sie der Methode noch vier weitere Parameter übergeben. Der zweite Wert definiert den MIME-Type, der für die Datei genutzt werden soll. Standard ist der Typ 'application/octet-stream'. Danach können Sie den Namen angeben, unter dem die Datei in die E-Mail eingefügt werden soll. Übergeben Sie hier keinen Namen oder einen leeren String, übernimmt die Methode den Originalnamen. Übergeben Sie an erster Stelle keinen Dateinamen, sondern direkt die Daten, die angehängt werden sollen, müssen Sie an der vierten Stelle den Wert true übergeben. Mit dem letzten Parameter können Sie festlegen, wie der Dateianhang in der Mail kodiert werden soll. Üblicherweise wird hierzu eine Base64-Kodierung genutzt, die diese Methode per Default vorsieht. Die Methode unterstützt die Strings '7bit', '8bit', 'quoted-printable' oder 'base64', um die gleichnamigen Kodierungen zu selektieren. Ich würde Ihnen allerdings empfehlen, bei Base64 zu bleiben.

Beim Versand von E-Mails auf HTML-Basis können Sie Bilder auch direkt in der E-Mail darstellen. Zum Einbinden der Datei ist die Methode addHTMLImage() vorgesehen. Die Parameter sind mit denen von addAttachment() identisch, wobei Sie die Kodierung nicht selektieren können. Des Weiteren benötigen Sie in dem HTML-Code, der verschickt wird, natürlich ein <img  />-Tag an der Stelle, an der die Grafik erscheinen soll. Der Name der Datei, den Sie nach src= angeben, muss mit dem Namen der Datei identisch sein, die Sie mit addHTMLImage() hinzufügen. Darüber stellt das System die Verknüpfung her.

Da Mail_mime selbst keine Mail verschicken kann, müssen Sie dazu auf PEAR::Mail oder die Funktion mail() zurückgreifen. Um die Mail nun aber versenden zu können, benötigen Sie die Header und den Körper der E-Mail. Den Körper der E-Mail können Sie mit get() auslesen. Wichtig ist, dass der Aufruf von get() vor dem Auslesen der Header erfolgen muss.

Wenn Sie E-Mail mit PEAR::Mail versenden, bietet sich die Methode headers() an. Sie gibt die Header in Form eines assoziativen Arrays zurück, so dass das Array dann an die send()-Methode von PEAR::Mail übergeben werden kann. Benötigen Sie zusätzliche Header, so können Sie diese in Form eines assoziativen Arrays an die header()-Methode übergeben. Diese Informationen werden dem zurückgelieferten Array dann eins zu eins hinzugefügt. Das Array muss jeweils den Namen des Headers als Schlüssel enthalten und auf den dazugehörigen Wert verweisen. Der Doppelpunkt, der den Namen des Headers und den Wert trennt, wird automatisch durch das System eingefügt.

Falls Sie allerdings direkt die Funktion mail() nutzen, benötigen Sie die Header in Form eines Strings. In diesem Fall bietet sich txtHeaders() an. Auch diese Methode akzeptiert ein Array mit zusätzlichen Headern, liefert die Daten aber als String zurück, der direkt an mail() übergeben werden kann.

Wenn Sie eine HTML-E-Mail verschicken, sollten Sie beachten, dass das System den Header "Content-type: text/html; charset=iso-8859–1" nicht selbstständig generiert. Dieser muss von Ihnen ergänzt werden. In Listing 8.2 finden Sie ein Beispiel, wie PEAR::Mail und Mail_mime kombiniert werden können.

require_once('Mail/mime.php'); 
require_once('Mail.php'); 
 
// Zeichen fuer Zeilenumbruch 
$eol="\n"; 
 
// Hier Ihre Daten eintragen 
$options = array ( 
               'host'      => 'smtp.example.com', 
               'auth'      => true, 
               'username'  => 'user', 
               'password'  => 'geheim' 
           ); 
 
// Mail-Objekt ableiten 
$mailer = Mail::factory('smtp',$options); 
if (true === PEAR::isError($mailer)) 
{ 
   die ($mailer->getMessage()); 
} 
 
// Empfaenger-Adresse 
$empfaenger = 'Carsten Moehrke <cmoehrke@netviser.de>'; 
 
// Neues Mail_mime-Objekt mit Zeilenumbruch definieren 
$mail = new Mail_mime($eol); 
// Absender festlegen 
$mail->setFrom ('Absender <info@example.com>'); 
 
// Betreff der Mail festlegen 
$mail->setSubject('Test-Mail mit PEAR'); 
 
// Den Inhalt der Mail definieren 
// Bitte beachten Sie das img-Tag 
$mail->setHTMLBody('<html><body bgcolor="#006600"> 
   <h2 style="color:white; font-family:sans-serif;">Hallo</h2> 
   <img src="pearsmall.gif" /> 
   </body></html>'); 
 
// Grafik hinzufuegen, die in der E-Mail gezeigt werden soll 
$mail->addHTMLImage('pearsmall.gif'); 
 
// Koerper der Mail auslesen 
$body = $mail->get(); 
 
// Zusaetzliche Header definieren 
$extra_header=array ('Content-type'=> 
                     'text/html; charset=iso-8859–1', 
                     'To' => 
                     $empfaenger); 
// Header ergaenzen und auslesen 
$headers = $mail->headers($extra_header); 
 
// Mail verschicken 
$res=$mailer->send($empfaenger,$headers,$body); 
if (true === PEAR::isError($res)) 
{ 
   die ($res->getMessage()); 
}

Listing 8.2 Versenden einer Mail mit Mail_mime und PEAR::Mail

Abbildung 8.1 Darstellung der E-Mail in Microsoft Outlook

Das Paket enthält auch noch eine Erweiterung zur Analyse von empfangenen E-Mails im MIME-Format. Da die Entwickler allerdings ausdrücklich empfehlen, andere Funktionen oder Pakete zu nutzen, werde ich diese Funktionalitäten hier nicht erläutern.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de