PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   HTML Format in e-Mail (http://www.selfphp.de/forum/showthread.php?t=1591)

Xantos 15.06.2002 21:45:01

HTML Format in e-Mail
 
Hi...

ich habe mal ne frage... einen HTML e - Mail body habe ich schon hinbekommen, aber jezt habe ich ein Problem. Wenn ich die email mir anschaue, und ich nicht online bin, dann kann ich die Bilder auch nicht sehen... geibt es eine möglichkeit diese trotdem anzeigen zu lassen, auch wenn der empfänger nicht online ist...?

Danke im Voraus... :)

|Coding 16.06.2002 06:03:18

hi,

also meiner meinung nach kann das nicht funzen, weil man bei internetaktivitäten, wie auch e-mails lesen/senden, online sein muss.

irgendwie logisch oder?

Progman 16.06.2002 11:37:49

Anhang
 
Vielleicht kannst du die nötigen Bilder per Anhang senden und in der Email auf diese Anhänge drauf zugreifen. Frag mich aber nicht wie. Und ob das sinnvoll ist auch so ne frage.

Matt 17.06.2002 14:24:08

mein tip: erstell mal ne entsprechende mail mit outlook oder sowas, schick sie dir selbst, und schau dir den quelltext an, da muss ganz am ende die datei angehängt sein, vielleicht steht irgendwas davor, dateilänge oder so, jedenfalls musst du das wohl genauso anhängen, dann funktioniert das.
du kannst dich natürlich auch durch die RFCs kämpfen und dir die E-Mail Spezifikationen ansehen...
www.rfc-editor.org
viel spass dabei jedenfalls! ;)

Nev 17.06.2002 17:37:21

Hi @ll

Man kann es machen!

Die Löung wie Progman gemeint hat, funkt leider ned!

Zu Matt's-Lösung:
Jedes Email-Programm speichert die Attachents anderes ab, und funkt daher auch ned, den nicht jeder verwendet Outlook (sie mich)

Du mußt die Bilder in das Mail-Codieren und im Mail mitschicken
(nicht als Attachemend)

Wenn ich zuhause bin POSTE ich die Links wo die Info steht, wenn ichs ned vergesse ;-)

Nev 17.06.2002 20:35:16

Hi @gain

Wie versprochen poste ich die Links zu den Info-Pages:
http://www.unibas.ch/urz/zimak/email/MIME.html

http://selfforum.teamone.de/archiv/2001/7/27231/ (Perl)

Matt 17.06.2002 22:05:58

bist du sicher, dass attachments in jedem programm unterschiedlich gespeichert werden? Demzufolge wären E-Mails ja plattform, bzw. softwareabhängig, ich hab allerdings noch kein email gekriegt, von dem ich das attachment nicht öffnen konnte.

Nev 17.06.2002 22:18:11

Ein Attachment ist ein File welches im Anhang ist.

Was ich meine ist in der Email, kein Anhang

dort sind die Pfad-Angeben so geschrieben, das sie vom Email-Prog umgesetzt wird.

zB:
bei Eudora:
file://C:ProgrammeEudoraEmbeddedlogo.gif

bei vivian email:
cid:logo.gif

|Coding 17.06.2002 22:29:26

naja, überschneidungen müssen aber doch vorhanden sein, wie sonst kann man von outlook usw. mails mit einem anderen clienten verwenden... wäre doch sinnlos, wenn jeder mail-client seinen, im übertragenen sinne, eigenen quell-code generieren würde.

wo wäre da die logik?

Nev 21.06.2002 14:53:52

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:17:40 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.