Einzelnen Beitrag anzeigen
  #10  
Alt 21.06.2002, 14:53:52
Benutzerbild von Nev
Nev Nev ist offline
Member
 
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 43
Beiträge: 992
Hi @ll
Ich habe gerade einen netten Beitrag gefunden, der dieses Problem behandelt!

--------------------------------------------------------------------------------
Sie kennen das sicherlich: Sie möchten ein HTML-Dokument oder gar Word- oder sonstige Attachments von PHP aus per Mail verschicken. Der in PHP eingebaute mail()-Befehl ist jedoch hierfür nicht ausreichend, da Mails nach dem MIME- Standard aufgebaut sein müssen, wenn Ihre Mail nicht nur aus reinem Text besteht.

Hierfür gibt es die Klasse Mail_Mime aus dem PEAR Framework, http://pear.php.net . Sie stammt von Richard Heyes und war früher auf phpguru.org bzw. in den Code Snippets auf zend.com zu finden und hat ihren Weg zu PEAR gefunden.

Um an diese Klasse zu kommen, war ein relativ stolpriger Weg, der mit der aktuellen Entwicklung von PEAR zu tun hat. Sie benötigen eine neuere PHP-Version (ich begnügte mich mit PHP 4.1.1). Ich verwendete den Installationsmechanismus via

lynx -source http://pear.php.net/~cox/go-pear | sh
Dieses installiert das PEAR-Binary nach /usr/local/bin/ sowie die PEAR Installationsklassen nach /usr/local/lib/php. Wichtig ist, dass in der php.ini der include_path um den Pfad zu den PEAR Installationsklassen erweitert wird, in der Regel also
include_path = .:/usr/local/lib/php
Sonst findet /usr/local/bin/pear (das ein PHP-Script ist) die benötigten PEAR-Basisklassen PEAR.php und System.php etc. nicht.
Im weiteren Schritt ging ich auf die Website http://pear.php.net/?devme und wählte den Menüpunkt "Browse Packages". Danach gelangen Sie zu einer Übersicht der verfügbaren Packages in PEAR. Ein Package ist grob gesagt eine .tgz Datei, die die jeweiligen PHP-Klassen plus eine package.xml Datei enthält. In letzterer stehen Anweisungen für den PEAR Installer (/usr/local/bin/pear), um das Paket an den richtigen Ort zu installieren.

Haben Sie die Datei Mail_Mime-1.1.tgz heruntergeladen (short link zur Package-Übersicht von Mail_Mime:

http://pear.php.net/package-info.php?pacid=21
), können Sie den pear-Installer folgendermaßen aufrufen (bitte beachten Sie, dass Sie in der Shell im gleichen Verzeichnis sein sollten, in das Sie die Datei Mail_Mime-1.1.tgz auch gespeichert haben):
/usr/local/bin/pear install Mail_Mime-1.1.tgz
Sollte alles glatt gehen, enthält das Verzeichnis
/usr/local/lib/php/Mail/
die Dateien aus dem Mail_Mime Paket (also mime.php etc.).
Leider wird in diesem Paket keine Dokumentation mitgeliefert, was auf den ersten Blick verwirrend ist. Findet sich die Dokumentation nämlich im PEAR Manual auf

http://pear.php.net/manual/en/core.mail.php
http://pear.php.net/manual/en/core.mail.mime.php
PEAR-Mitarbeiter Martin Jansen hat jedoch versprochen, die Dokumentation in das Mail_Mime Paket in etwa 4 Wochen zu integrieren.
Sind diese Hürden umschifft, kann es dann auch gleich los gehen. Die Dokumentation enthält ein kleines Beispiel, um eine HTML/Text E-Mail mit einem Attachment zu verschicken.

Im folgenden Beispiel soll ein HTML Newsletter mit eingebetteten Bildern verschickt werden. Das Verfahren ist hierbei ähnlich leicht wie im PEAR Manual:


<?php
include "Mail.php";
include "Mail/mime.php";

/**
* unter Windows sollte man
verwenden.
*/
$mime = new Mail_Mime("
");

$html = "<html><body bgcolor='#ffffff'>
<h1>rent-a-phpwizard.de Newsletter</h1>
<p>
Dies ist ein kleiner Test, wie ein Newsletter mit eingebetteten
Images, d.h. direkt in der Mail mitgelieferten Bilder, aussehen
könnte.
</p>
<p align='center'>
<img src='bild.jpg' alt='Bild'>
</p>
</body></html>";

/**
* den HTML-Body der Mail setzen. Alternativ kann der
* HTML-Code auch aus einer Datei kommen. Dann geben
* Sie als ersten Parameter den Dateinamen und als zweiten
* Parameter TRUE an.
*/
$mime->setHTMLBody($html);

/**
* embedded image anfügen.
*/
$mime->addHTMLImage("/home/bjoern/bild.jpg","image/jpeg");


Was ist bis jetzt geschehen? Es wurde der HTML Body der Mail gesetzt und ein embedded Image angefügt. Die Methode addHTMLImage() erwartet mehrere Parameter. In der Regel reichen die ersten beiden Parameter aus: den Dateinamen sowie den MIME Type der Datei, also zum Beispiel image/jpeg. Ebenfalls weist die Dokumentation darauf hin: Sie sind nicht daran gebunden, nur Bilder einzubetten, sondern können zum Beispiel auch Flash Movies mit dieser Methode einbetten.
Im nächsten Schritt erstellen Sie ein Array, das notwendige Header wie zum Beispiel den Absender oder die Subject-Zeile enthält:


$hdr = array(
"From" => "ihre@email.de",
"Subject" => "Newsletter vom 16. März 2002"
);


Bis hierhin sind alle Vorarbeiten abgeschlossen. Die nächsten Schritte sind:
Abholen des nach MIME-Standard zusammengestellten Body der Mail

Abholen der Header der Mail, die teilweise weitere (z.B. MIME-)Header enthalten
Wie folgt:

$body = $mime->get();
$hdr = $mime->headers($hdr);


Der Methode headers() können Sie beliebige Header übergeben. Das Manual weist darauf hin, dass headers() immer nach get() aufgerufen werden sollte, da die Methode get() selbst noch einige Header setzt (für MIME).

Den so erhaltenen Body und die Header können Sie dann der Sende-Funktion der jeweiligen Factory-Klassen Mail_mail, Mail_sendmail oder Mail_smtp übergeben. Mit diesen Factory- Klassen ist es möglich, eine Mail auf unterschiedlichen Wegen (per mail() Funktion, per externem sendmail Kommando oder direkt per SMTP) zu verschicken. Für diese eine Mail begnüge ich mich mit dem Aufruf der mail()-Funktion, die die Factory-Klasse Mail_mail bereitstellt:


/**
* Instanz von Mail_mail erzeugen
*/
$mail =& Mail::factory("mail");

/**
* Mail verschicken
*/
$mail->send("hier@hin.de", $hdr, $body);


Sie sehen, es ist mit Mail_Mime sehr einfach, komplex aufgebaute E-Mails zu verschicken.
__________________
Cu
Nev the XxX (Sven-Marcus Maderbacher)

Master of www.Burnworld.de
www.Nev-hilft.de die Seite für den Coder
Mit Zitat antworten