PHP 4.3

12.3.1 Beispiel

In unserem Beispiel wollen wir eine JPEG-Grafikdatei als Anhang mitversenden. Das dazugehörige Skript sieht dann wie folgt aus:

Beispiel zum Versenden einer E-Mail mit Anhang

<?php

  // Die E-Mail Adresse des Empfängers und den Betreff
  $empfaenger = "klaus@example.de";
  $betreff = "Mein schoenstes Urlaubsfoto";

  // Hier wird der Textstring der Abgrenzung generiert
  $abgrenzung = md5(uniqid(rand()));

  // Das sind die Kopfzeilen der Multipart Mail
  $kopf = "MIME-Version: 1.0\n";
  $kopf.= "Content-Type: multipart/mixed; boundary = \"$abgrenzung\"\n";

  // Jetzt kommt der erste Block mit HTML-Text
  $text.= "--".$abgrenzung."\n";
  $text.= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
  $text.= "Content-Transfer-Encoding: 8bit\n\n";
  $text.= "<h1>Urlaub 2000</h1>\n";

  // Jetzt kommt der zweite Block mit dem JPEG-Bild
  $text.= "--".$abgrenzung."\n";
  $text.= "Content-Type: image/jpeg; name=test.jpg\n";
  $text.= "Content-Transfer-Encoding: base64\n";
  $text.= "Content-Disposition: attachment; filename=test.jpg\n\n";

  // Die Datei test.jpg wird mit fread komplett in einen String eingelesen ..
  $attachment = fread(fopen("test.jpg", "r"), filesize("test.jpg"));
  // ... mit base64 codiert ...
  $attachment = chunk_split(base64_encode($attachment));
  // ... und in die Mail eingefügt
  $text.= $attachment."\n";

  // abschließende Begrenzung der Multipart-Mail
  $text.= "--".$abgrenzung."--\n";

  // und Tschüss ...
  mail($empfaenger, $betreff, $text, $kopf);

?>

Den Textstring der Abgrenzung erzeugen wir mit der uniqid()-Funktion. Diese erzeugt einen einmaligen 32-Bit-langen Code in Abhängigkeit von einem im Parameter angegebenen Präfix. Wir benutzen die PHP-Funktion rand(), welche eine Zufallszahl zurückgibt. Weiterhin codieren wir diesen Code noch mit dem MD5-Algorithmus (MD = message-digest). Dieser generiert aus einer Zeichenkette mit beliebiger Länge eine verschlüsselte Zeichenkette mit einer Länge von 128 Bit und wird oft da verwendet, wo eindeutige Kennzeichnungen, wie zum Beispiel bei einer Session-Nummer, nötig sind.

Das Codieren der Bilddatei wollen wir etwas näher erläutern:

Wie man im Skript erkennen kann, wird die Datei erst in einen String komplett eingelesen:

$attachment = fread(fopen("test.jpg", "r"), filesize("test.jpg"));

Normalerweise hat ein Zeichen eine Länge von 8 Bit. Bei der Base64 - Codierung werden jeweils 3 hintereinanderfolgende Zeichen genommen (3*8 = 24 Bit) und in 4 Zeichen mit der Länge 6 Bit (4*6 = 24 Bit) über eine Zuordnungstabelle umgewandelt. PHP erledigt dies für uns mit der base64_encode Funktion:

base64_encode($attachment)

Die Rückcodierung kann mit base64_decode geschehen. Darum müssen wir uns jedoch nicht kümmern, denn dafür ist der E-Mailclient des Empfängers zuständig.
Da MIME bei einer base64 Codierung auf eine maximale Zeilenlänge von 76 Zeichen besteht, müssen wir dies berücksichtigen. PHP bietet aber dafür eine Funktion chunk_split():

$attachment = chunk_split(base64_encode($attachment));


Abrufen von E-Mail aus einer Mailbox

Eine ähnliche Funktion wie beim Verschicken ist zum Empfangen von E-Mails standardmäßig in PHP nicht implementiert. Meist ist im Angebot der PHP-Installation eine Bibliothek vorhanden, welche viele Funktionen zum Umgang mit POP3- und IMAP-Servern zur Verfügung stellt. Wenn Sie Näheres darüber wissen möchten, empfehlen wir Ihnen den vertiefenden Blick in weiterführende Literatur, da dies den Umfang des vorliegenden Kurses überschreiten würde.

Kommentare (0)

Ihr Kommentar

Name