|

Mail versenden mit
PHP
e-Mail mit blind carbon copies (BCC)
Das gleiche Mail an mehrere Empfänger schicken
Mails über einen smtp Server im Netz
verschicken
HTML-email verschicken
Email mit Attachement verschicken
Mehrere Dateien als Attachement verschicken
HTML-Mails mit inline Images verschicken
Beim Versenden von mail aus einem HTML Formular
heraus, sind unterschiedliche Szenarien zu unterscheiden.
Mail kann entweder von dem eigenen, lokalen Rechner verschickt
werden, oder von dem Rechner eines Internetproviders. Die
erste Situation hat man zum Beispiel, wenn man einen Skript
schreibt und testen will, ob er überhaubt funktionniert
(weitere Möglichkeit: Man ist selber Provider). Verschickt
man Mail von einem Provider aus, ist die Angelegenheit easy
and straightforward, da sendmail, auf das PHP im Default,
wenn man nichts an der php.ini ändert, zugreift, in dieser
Situation schon komplett konfiguriert ist. Zweitens geht es
um die Frage, was das Mail genau beinhaltet. Soll die Möglichkeit
attachements anzufügen zur Verfügung stehen, sollen
reine Text-emails oder HTML-emails verschickt werden, sollen
HTML-emails mit Bildern verschickt werden, an wieviele Absender
soll das email verschickt werden etc. etc. Beginnen wir mit
dem einfachsten Fall. Ein reines Text-email verschicken, wenn
der PHP Skript, der es verschickt bei einem Provider liegt.
Um überhaupt ein Mail aus einem HTML Formular heraus
verschicken zu können, brauchen wir erst mal ein HTML
Formular.
<html><head><title>Mail
verschicken mit PHP </title></head>
<body>
<form action=maili.php4>
<table>
<tr><td>Nachname</td><td><input
type=text name=Nachname></td></tr>
<tr><td>Vorname</td><td><input
type=text name=Vorname></td></tr>
<tr><td>Beruf</td><td><input type=text
name=Beruf></td></tr>
<tr><td>Telefon</td><td><input
type=text name=Telefon></td></tr>
<tr><td>email</td><td><input type=text
name=mailaddi></td></tr>
<tr><td colspan=2 align=middle><input type=submit
value="abschicken"></td></tr>
</table>
</form>
</body>
</html>
So sieht das Formular dann aus: zeigen
Der Skript, der es verschickt, sieht dann einfach so aus:
<?
$mail_empfaenger="infos@infos24.de";
$mail_absender=$mailaddi;
$betreff="Eine Testmail";
$text="Mein Name ist $Vorname $Nachname, von Beruf bin
ich $Beruf.
Rufen Sie mich mal an unter der Nummer $Telefon. \n Mit freundlichen
Grüssen";
mail(mail_empfaenger, $betreff, $text,"from:$mail_absender");
?>
Man braucht jetzt einen Provider, wo man
diesen Skript testen kann. Wir werden einen solchen Testaccount
in Kürze zur Verfügung stellen.
| e-Mail
mit blind carbon copies (BCC) |
|
Will man ein mail an mehrere Empfänger
gleichzeitig verschicken, kann man das machen, indem man weitere
blind carbon copies (BCC) angibt. Das sieht dann so aus:
<?
mail(Andres_Ehmann_infos24.de
"Test mit blind carbon copy",
"Man kann auch mehrere emails auf einen Hops verschicken.",
"Bcc: infos@infos24.de\r\nBcc:regionalportal@infos24.de\r\nfrom:schulungen@infos24.de\r\n");
print "email wurde verschickt";
?>
Man bedenke, dass die mail-Funktion nur
vier Parameter hat und folglich alles was optional ist in
diesem letzten unterzubringen ist. Blind carbon copys haben
den unbestechlichen Charme, dass nicht alle Leute, an die
das email verschickt wurde, oben aufgelistet sind. Andererseits
kann man auch den Standpunkt vertreten, dass das für
den Empfänger ein bisschen verblüffend ist. Er sieht
als Empfänger eine email Adresse, die nicht seine eigene
ist. Es macht also unter Umständen, wenn sich der Benutzerkreis,
an den man das mail schickt, nicht kennt, durchaus Sinn, alle
Empfänger der mail oben aufzulisten. Das sieht dann so
aus:
<?
mail(Andres_Ehmann@infos24.de,infos@infos24.de,miguelin@freenet.de,
"Mails an mehrere Absender schicken",
"Man kann auch mehrere emails auf einen Hops verschicken.",
"from:schulungen@infos24.de\r\n");
print "email wurde verschickt";
?>
| Das
gleiche Mail an mehrere Empfänger schicken |
|
Diese Variante wiederum hat auch einen
Nachteil, sie ist ziemlich langsam. Will man also das gleiche
mail an mehrere Empfänger schicken und will man, dass
in der Empfänger oben seine eigene mail sieht, dann kann
man auch sowas machen:
<?
$email_adressen="Andres_Ehmann@web.de||infos@infos24.de||
Andres_Ehmann@infos@infos24.de||schulungen@infos24.de";
$emails_in_array=explode("||",$email_adressen);
foreach($emails_in_array as $email)
{
mail(email,"Na du Gurke, kriegste auch mal Post","Hallo
!
wir haben dich nicht vergessen","from:dein_engel@himmelreich.de\r\n");
print "Mail an $email wurde verschickt <br>";
}
?>
Das scheint ziemlich schnell zu gehen, zumindest
haben wir damit auch bei Massenmails, mehr als 2000, noch
keine schlechten Erfahrungen gemacht.
| Mails
über einen smtp Server im Netz verschicken |
|
Bei allen Skripten bisher wurde davon ausgegangen,
dass das Umfeld, also sendmail und der smtp-Server steht.
Oft will man aber lediglich lokal testen, ob es überhaupt
funktionniert. In diesem Falle ist die php.ini im Verzeichnis
Windows folgendermassen anzupassen.
[Syslog]
; Whether or not to define the various syslog variables (e.g.
$LOG_PID,
; $LOG_CRON, etc.). Turning it off is a good idea performance-wise.
In
; runtime, you can define these variables by calling define_syslog_variables().
<B>define_syslog_variables = Off</B>
[mail function]
; For Win32 only.
<B>SMTP = mx.freenet.de</B>
; For Win32 only.
<B>sendmail_from =hopsala@freenet.de</B>
; For Unix only. You may supply arguments
as well (default: "sendmail -t -i").
;sendmail_path =
Bei SMTP muss ein SMTP Server stehen,
auf den man Zugriff hat, bei dem man also eine Email Adresse
hat. Diese muss dann unter sendmail_from eingetragen werden.
In der Regel hat man ja sowas, weil jeder Internet Zugangs
Provider es zur Verfügung stellt. Nachdem man die php.ini
korrigiert hat, kann man mit diesem Skript ausprobieren, ob
es tatsächlich funktioniert. Diesen Skript muss man dann
in die Document Root des HTTP Servers legen, den man vorher
sinnigerweise hochfährt.
<?
$email_adressen="Andres_Ehmann@web.de||infos@infos24.de||
Andres_Ehmann@web.de||infos@infos24.de||schulungen@infos24.de";
$emails_in_array=explode("||",$email_adressen);
foreach($emails_in_array as $email)
{
chop($email);
mail(email,"Na du Gurke, kriegste auch mal Post",
"Hallo ! wir haben dich nicht vergessen");
print "Mail an $email wurde verschickt <br>";
}
?>
Den Skript kann man dann aufrufen mit http://127.0.0.1/irgendein_name.php.
Die email-Adressen sollte man ändern, sonst kriegt man
nämlich keine mails.
Verschickt einen Newsletter, Rundschreiben
an Kunden, eine Zeitung etc. dann macht das unter Umständen
mehr her, wenn man es im HTML-Format verschickt, weil dann
die gestalterischen Möglichkeiten wesentlich größer
sind. Wie es geht, zeigen
wir anhand des Formulars, das wir oben schon hatten.
<html><head><title>Mail
verschicken mit PHP </title></head>
<body>
<form action=maili.php4>
<table>
<tr><td>Nachname</td><td><input
type=text name=Nachname></td></tr>
<tr><td>Vorname</td><td><input
type=text name=Vorname></td></tr>
<tr><td>Beruf</td><td><input type=text
name=Beruf></td></tr>
<tr><td>Telefon</td><td><input
type=text name=Telefon></td></tr>
<tr><td>email</td><td><input type=text
name=mailaddi></td></tr>
<tr><td colspan=2 align=middle><input type=submit
value="abschicken"></td></tr>
</table>
</form>
</body>
</html>
Will man das als HTML Mail verschicken,
sieht das so aus:
<?
$mail_empfaenger="infos@infos24.de";
$mail_absender=$mailaddi;
$betreff="Eine Testmail";
$text="
<html><head><title>Test></title></head>
<body>
<table border=5>
<tr><td bcgolor=blue>Name</td><td bgcolor=red>$Vorname
$Nachname</td></tr>
<tr><td bgcolor=yellow> Beruf</td><td
bgcolor=green>$Beruf</td></tr>
<tr><td>Telefon</td><td>$Telefon</td></tr>
<tr><td colspan=2>Mit freundlichen Grüssen</td></tr>
</table>";
</body>
</html>
mail(mail_empfaenger, $betreff, $text,"from:$mail_absender\r\
nContent-Type:text/html\r\nContent-Transfer-Encoding: 8bit\r\n");
print "email wurde verschickt";
?>
Es ist also nicht viel zu ändern.
Anzugeben ist lediglich, dass sich der Content-Type geändert
hat.
| Email
mit Attachement verschicken |
|
Schwieriger wird es, wenn mit dem email
ein Attachement (Anhang) verschickt werden soll. Man braucht
dann erstmal ein HTML-Formular, wo man ein Bild aussuchen
kann.
<html><head><title>Mail
verschicken mit PHP </title></head>
<body>
<form action=maili.php enctype=multipart/form-data method=post>
<table>
<tr><td>Nachname</td><td><input
type=text name=Nachname></td></tr>
<tr><td>Vorname</td><td><input
type=text name=Vorname></td></tr>
<tr><td>Beruf</td><td><input type=text
name=Beruf></td></tr>
<tr><td>Telefon</td><td><input
type=text name=Telefon></td></tr>
<tr><td>email</td><td><input type=text
name=mailaddi></td></tr>
<tr><td colspan=2><input type=file name=datei></td></tr>
<tr><td colspan=2 align=middle><input type=submit
value="abschicken"></td></tr>
</table></form>
</body>
</html>
Das Formular sieht dann so aus:
zeigen
Hinsichtlich des Attributs enctype=multipart/form-data
und dem Tag
<input type=file name=datei>
siehe Formulareingaben
auswerten/Bildupload. Ein Skript, mit dem man das Bild
dann versenden kann sieht dann so aus:
<?
$grenze="grenzlinie";
$name_des_bildes=$HTTP_POST_FILES['datei']['name'];
$headers ="MIME-Version: 1.0\r\n";
$headers.="From: $mailaddi\n";
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";
$botschaft<I></I>="\n--$grenze\n";
$botschaft.="Content-transfer-encoding: 7BIT\r\n";
$botschaft.="Content-type: text/plain\n\n";
$botschaft.= "Guten Tag $Vorname $Nachname. $Beruf ist
ein schöner Beruf.
Wir werden uns in Kürze unter der genannten Rufnummer
$Telefon mit Ihnen in Verbindung setzen. \n";
$botschaft.="\n\n";
$botschaft.="\n--$grenze\n";
$botschaft.="Content-Type: application/octetstream;\n\tname=$name_des_bildes\n";
$botschaft.="Content-Transfer-Encoding: base64\n";
$botschaft.="Content-Disposition: attachment;\n\tfilename=$name_des_bildes\n\n";
$zeiger_auf_datei=fopen("$datei","rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize("$datei"));
fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;
$botschaft.="\n\n";
$botschaft.="--$grenze";
mail(Andres_Ehmann@web.de","test mit attachements",$botschaft,$headers);
print "email wurde versandt";
?>
Die Komplexität dieses Skriptes
ergibt sich aus der Tatsache, dass wir innerhalb der email
zwei verschieden Bereiche haben. Einmal den Text und zum anderen
das Bild. Jeder dieser Bereiche muss vom anderen abgegrenzt
werden und jeder dieser Bereiche hat seine eigenen Header.
Dass das email aus unterschiedlichen Bereichen besteht, teilen
wir dem empfangenden Client in der Zeile
$headers ="MIME-Version: 1.0\r\n";
mit. MIME (Multipurpose Internet Mail
Extensions) zeigt dem Client an, dass das mail aus mehreren,
unterschiedlich zu interpretierenden Bereichen besteht. In
der nächsten Zeile teilen wir dem Client mit, dass die
Bereiche willkürlich gemixt sind und weiter teilen wir
ihm noch mit, wie die Zeichenkette aussieht, die den einen
Bereich vom anderen trennt. Das sieht dann so aus.
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";
Unsere Grenze heisst sinnigerweise grenzlinie.
Diese Grenze, mit den zwei vorangestellten Bindestrichen setzen
wir vor jeden neuen Abschnitt, so dass der email Client erkennt,
wenn ein neuer Abschnitt anfängt. Nach der Grenze teilen
wir dem Client mit, wie die Daten übertragen werden (Content-Transfer)
und um welchen Typ von Daten es sich handelt (Content-Type).
Bei Bildern muss man noch Content-Disposition angeben, weil
sie ja nicht immer im Body stehen. Die mittels
<input type=file name=datei>
übertragene Datei haben wir im Kapitel
Formulareingaben auswerten/Bildupload auf der Festplatte gespeichert.
Was wir hier machen kann im ersten Moment verwirrend sein.
Wenn man sich aber klar macht, dass eine Datei, die upgeloadet
wurde, in einem temporären Verzeichnis abgelegt wird,
so sieht man sofort, dass sie ganz normal, wie unter Arbeiten
mit Flatfile Datenbanken beschrieben, in eine Variable eingelesen
werden kann.
$zeiger_auf_datei=fopen("$datei","rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize("$datei"));
fclose($zeiger_auf_datei);
Über das rb können wir uns
wundern, es ist aber notwendig, weil es sich bei der Datei
um ein Bild handelt, dass im binary Modus eingelesen werden
muss. Richtig verblüffend ist die Zeile
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
Sie konvertiert das Bild in eine Datei
aus lauter Buchstaben und Zahlen. Dies ist notwendig, da das
smtp Protokoll textbasiert ist und nur Buchstaben und Zahlen
akzeptiert werden. Der email-Client muss dies wieder rückgäng
machen, damit das Bild dargestellt werden kann. Er muss also
wissen, was das ist, was da ankommt. Dies haben wir ihm aber
in der Zeile
$botschaft.="Content-Transfer-Encoding: base64\n";
bereits mitgeteilt. Alle Informationen,
mit Aussnahme der Header Informationen, speichern wir ab in
der Variable $Botschaft.
| Mehrere
Dateien als Attachement verschicken |
|
Will man die Möglichkeit bieten,
mehrere Bilder auf einen Hops via email zu versenden, so braucht
man erstmal ein anderes HTML Formular.
<html><head><title>Mail
verschicken mit PHP </title></head>
<body>
<table>
<form action=maili.php enctype=multipart/form-data method=post>
<table>
<tr><td>Nachname</td><td><input
type=text name=Nachname></td></tr>
<tr><td>Vorname</td><td><input
type=text name=Vorname></td></tr>
<tr><td>Beruf</td><td><input type=text
name=Beruf></td></tr>
<tr><td>Telefon</td><td><input
type=text name=Telefon> </td></tr>
<tr><td>email</td><td><input type=text
name=mailaddi></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2 align=middle><input type=submit
value="abschicken"></td></tr>
</table>
</form>
</body></html>
welches dann so aussieht: zeigen
Wie man grundsätzlich mehrere Dateien
auf einen Hops auf einen Fremdrechner uploadet, siehe Formulareingaben
auswerten/Bildupload. Der PHP Skript, mit dem man dann diese
drei Bilder auf einen Husch verschicken kann sieht dann so
aus:
<?
$dateienname=array();
foreach($datei_name as $himbeere)
{
array_push($dateienname,$himbeere);
}
$grenze="grenzlinie";
$name_des_bildes=$HTTP_POST_FILES['datei']['name'];
$headers ="MIME-Version: 1.0\r\n";
$headers.="From: $mailaddi\n";
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";
$botschaft="\n--$grenze\n";
$botschaft.="Content-transfer-encoding: 7BIT\r\n";
$botschaft.="Content-type: text/plain\n\n";
$botschaft.= "Guten Tag $Vorname $Nachname.
$Beruf ist ein schöner Beruf. Wir werden uns in Kürze
unter der genannten Rufnummer $Telefon mit Ihnen in Verbindung
setzen. \n";
$botschaft.="\n\n";
for ($i=0;$i<count($datei);$i++)
{
$botschaft.="\n--$grenze\n";
$botschaft.="Content-Type: application/octetstream;\n\tname=".$dateienname[$i]."\n";
$botschaft.="Content-Transfer-Encoding: base64\n";
$botschaft.="Content-Disposition: attachment;\n\tfilename=".$dateienname[$i]."\n\n";
print $datei[$i]."<br>";
$zeiger_auf_datei=fopen($datei[$i],"rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize($datei[$i]));
fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;
$botschaft.="\n\n";
}
$botschaft.="--$grenze";
mail(miguelin@arcor.de","test mit attachements",$botschaft,$headers);
print "email wurde versandt";
?>
Die Vorgehensweise ist also recht simpel,
man lässt einfach den Bereich mit dem Bild so oft laufen,
wie Bilder da sind. Komplexere emails zu verschicken ist eine
heikle, fehleranfällige Angelegenheit. Wenn etwas schief
gelaufen ist, kann es hilfreich sein, sich genau anzuschauen,
was angekommen ist. Bei Outlook tut man das in dem das email
aufmacht, dann Datei-> Eigenschaften-> Details. Dann
hat man die Möglichkeit Quelltext zu wählen.
Für das Beispiel oben erhält man dann das hier.
Return-path: <galigula@freenet.de>
Delivery-date: Wed, 11 Dec 2002 01:21:59 +0100
Received: from [194.97.55.148] (helo=mx5.freenet.de)
by mbox45.freenet.de with asmtp (ID exim) (Exim 4.10 #1)
id 18LudS-0007hq-00
for galigula@01019freenet.de; Wed, 11 Dec 2002 01:21:58 +0100
Received: from b3d18.pppool.de ([213.7.61.24] helo=shokufeh)
by mx5.freenet.de with smtp (Exim 4.10 #1)
id 18LudQ-0003Ww-00
for galigula@freenet.de; Wed, 11 Dec 2002 01:21:56 +0100
Date: Wed, 11 Dec 2002 01:19:11 +0100
Subject: test mit attachements
To: galigula@freenet.de
MIME-Version: 1.0
From: Andres_Ehmann@web.de
Content-Type: multipart/mixed;
boundary=grenzlinie
Message-Id: <E18LudQ-0003Ww-00@mx5.freenet.de>
Delivered-To: miguelin@freenet.de
Envelope-to: miguelin@freenet.de
--grenzlinie
Content-transfer-encoding: 7BIT
Content-type: text/plain
Guten Tag Andres Andres Ehmann. Diplom Volkswirt
ist ein schöner Beruf. Wir werden uns in Kürze unter
der genannten Rufnummer 030/47301390 mit Ihnen in Verbindung
setzen.
--grenzlinie
Content-Type: application/octetstream;
name=bkein.jpg
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=bkein.jpg
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYF
BgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAqAHUDASIA
etc.
--grenzlinie
Content-Type: application/octetstream;
name=afg.jpg
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=afg.jpg
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYF
BgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoK
etc.
--grenzlinie
Content-Type: application/octetstream;
name=maily.gif
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=maily.gif
R0lGODlhegAsALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/
/////yH5BAEAAA8ALAAAAAB6ACwAAAT+8MlJq7046827/2AojmRpnmiqruwGvDDQznQKMHguk/Fe
etc.
--grenzlinie
Im Falle des Scheiterns, kann man den
Quelltext vergleichen mit einer Variante die funktionniert.
Das kann helfen.
Wenn man HTML-emails verschicken will, ist die Wahrscheinlich
relativ gross, dass man auch Bilder verschicken will und zwar
innerhalb des bodys der email, also nicht via
<img src=http://www.wasweisich.de/bilder/banane.jpg>.
| HTML-Mails
mit inline Images verschicken |
|
Das funktionniert nur, wenn eine permanenten
Internetverbindung besteht. Will man sicher gehen, dass das
Bild tatsächlich dargestellt wird, muss man das Bild
übertragen und in die HTML Seite einbauen. Weiter müsste
man bei der erstgenannten Variante das Bild erstmal ins Internet
setzen, während man es bei der hier vorgestellen Variante
direkt vom Desktop mitverschicken kann. Um das email mit den
drei inline-Bildern zu verschicken, verwenden wir wieder das
gleiche HTML Formular wie oben.
<html><head><title>Mail
verschicken mit PHP </title></head>
<body>
<table>
<form action=maili.php enctype=multipart/form-data method=post>
<table>
<tr><td>Nachname</td><td><input
type=text name=Nachname></td></tr>
<tr><td>Vorname</td><td><input
type=text name=Vorname></td></tr>
<tr><td>Beruf</td><td><input type=text
name=Beruf></td></tr>
<tr><td>Telefon</td><td><input
type=text name=Telefon> </td></tr>
<tr><td>email</td><td><input type=text
name=mailaddi></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2><input type=file name=datei[]></td></tr>
<tr><td colspan=2 align=middle><input type=submit
value="abschicken"></td></tr>
</table>
</form>
</body></html>
Wenn wir die Bilder als Bestandteil der
HTML Email haben wollen, brauchen wir ein Skript, dass so
ähnlich aussieht wie dieses hier.
<?
$dateienname=array();
foreach($datei_name as $himbeere)
{
array_push($dateienname,$himbeere);
}
$grenze="grenzlinie";
$name_des_bildes=$HTTP_POST_FILES['datei']['name'];
$headers ="MIME-Version: 1.0\r\n";
$headers.="From: $mailaddi\n";
$headers.="Content-Type: multipart/related;\n\tboundary=$grenze\n";
$headers.="Content-Disposition:inline\n";
$botschaft="\n--$grenze\n";
$botschaft.="Content-Type: text/html;charset=iso-8859-1\n";
$botschaft.="Content-Transfer-Encoding: 8bit\n\n";
$botschaft.= "<html><head><title>Test</title></head><body>";
$botschaft.="<font color=red size=5>Guten Tag $Vorname
$Nachname !</font><br>";
$botschaft.="Hier nochmal Ihre Bilder <br><table><tr>";
for($i=0;$i<count($datei);$i++)
{
$botschaft.="<td width=150 align=middle bcgolor=yellow>
<img src=cid:bild_$i border=5 width=120></td>";
}
$botschaft.="</tr></table><br>$Beruf
ist ein schöner Beruf.
Wir werden uns in Kürze unter der genannten Rufnummer
$Telefon
mit Ihnen in Verbindung setzen.";
$botschaft.="</body></html> \n";
for ($i=0;$i<count($datei);$i++)
{
$botschaft.="\n--$grenze\n";
$botschaft.="Content-Type: application/octetstream;\n\tname=".$dateienname[$i]."\n";
$botschaft.="Content-Transfer-Encoding: base64\n";
$botschaft.="Content-ID: <bild_$i>\n";
$botschaft.="Content-Disposition:inline;filename=".$dateienname[$i]."\n\n";
$zeiger_auf_datei=fopen($datei[$i],"rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize($datei[$i]));
fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;
}
$botschaft.="--$grenze";
mail(miguelin@arcor.de","Schöne HTML
Seite mit Bildern drin",$botschaft,$headers);
print "email wurde versandt";
?>
Uns fallen jetzt zwei Dinge auf. Erstens,
bei
<img src=irgendwas.jpg>
steht nicht mehr der Name des Bildes sonder sowas.
<img src=cid:bild_$i border=5 width=120>
cid ist hierbei festgeschrieben, und
weist darauf hin, dass hier nicht der Bildname direkt, sondern
eine Variable auf das Bild verweist. Diese Variable generieren
wir an dieser Stelle.
$botschaft.="Content-ID: <bild_$i>\n";
Weiter ist im Kopf der mail ein anderer
Header zu produzieren.
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";
geht nicht mehr, weil das Dokument ja nicht
mehr aus Bereichen besteht, die nichts miteinander zu tun
haben. Die Bilder sollen in die HTML Seite integriert werden,
sind also mit dieser verzahnt. Folglich brauchen wir an dieser
Stelle.
$headers.="Content-Type: multipart/related;\n\tboundary=$grenze\n";
Damit wären die wichtigsten Fälle
wohl abgedeckt.
|