PHP 4.3

12.3 Versenden einer E-Mail mit Anhang (Attachment)

Um Anhänge (Attachments) mit einer E-Mail zu verschicken, ist etwas mehr Aufwand erforderlich. Die E-Mail wird hierzu als MIME-Multipart-Nachricht versendet.

Eine Multipart-Nachricht kann aus verschiedenen Blöcken bestehen und jeder Block kann einen anderen MIME-Typ besitzen. Die Blöcke werden untereinander mit einem eindeutigen Textstring (Boundary) abgetrennt. So wird in der Regel ein Anhang als ein bestimmter MIME-Block in die Mail eingefügt. Je nach Art des Anhangs, also des Dateiformates, wird der Typ des MIME-Blocks bestimmt. Wichtig ist dabei, dass der normale Text ebenfalls als MIME-Block eingefügt wird.

Der Vorgang im Einzelnen:

Als Erstes wird im Kopf die Mail als multipart/mixed gekennzeichnet, und ein Textstring als Abgrenzung (Boundary) der Blöcke angegeben:

 MIME-Version: 1.0
 
 Content-Type: multipart/mixed; boundary = "++++++eindeutiger
 Textstring+++++++";

Danach können jeweils die MIME-Blöcke eingefügt werden. Am Anfang und Ende jedes MIME-Blocks steht der Textstring, der am Anfang festgelegt wurde. Zusätzlich zu dem Textstring beginnt die Abgrenzung mit zwei Bindestrichen. Also insgesamt beispielsweise so:

--++++++eindeutiger Textstring+++++++

Danach kommen jeweils die Kopfzeilen für den MIME-Block und die Daten selbst. Der Block wird dann erneut mit zwei Bindestrichen und dem Textstring beendet.
Wichtig dabei ist, dass jede Zeile, wie die Abgrenzung oder eine Kopfzeile, mit einem Zeilenumbruch abgeschlossen wird. Die letzte Kopfzeile eines Blocks, bevor die Daten beginnen, muss sogar mir zwei Zeilenumbrüchen abgeschlossen werden.

Die letzte Abgrenzung besteht zusätzlich noch aus zwei angefügten Bindestrichen, um das Ende der Multipart-Mail zu kennzeichnen; in unserem Fall:

--++++++eindeutiger Textstring+++++++--

Ein Dateianhang wie ein Programm oder Bild sähe als Block so aus:

--++++++eindeutiger Textstring+++++++
 Content-Type: image/jpeg; name=bild.jpg
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=bild.jpg


 0134243FA3445FA ..... (Dies sind die Daten des Bildes) ....
 ................................................... 23E433
 --++++++eindeutiger Textstring+++++++

Wie man sieht, ist das Format der Datei als Content-Type: image/jpeg angegeben; danach folgt der Name des Bildes. Als Codierungsverfahren wird standardmäßig base64 verwendet. Wie das in PHP funktioniert, sehen wir später noch. Content-Disposition gibt an, wie der Anhang vorliegt, in unserem Fall als attachment; eine andere Möglichkeit wäre noch inline (im Body eingebunden), worauf wir aber nicht näher eingehen möchten. Wieder mit Semikolon getrennt, folgt noch der Dateiname des Anhangs. Danach besteht eine Leerzeile, und dann kommen die codierten Daten.

Zur Verdeutlichung schauen wir uns jetzt mal eine original E-Mail mit Text und einer JPEG-Grafikdatei als Anhang im Detail an:

 Date: Mon, 26 Feb 2001 17:21:45 +0100 (MET)
 From: postmaster+49389@post.webmailer.de
 Message-Id: <200102261621.RAA11342@chroot.webmailer.de>
 To: paul@p-ex.de
 Subject: Mein schoenstes Urlaubsfoto
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary =
 "b7e73f764cb05852c94488561e931041"
--b7e73f764cb05852c94488561e931041 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: 8bit
<h1>Hi</h1> --b7e73f764cb05852c94488561e931041 Content-Type: image/jpeg; name=test.jpg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=test.jpg

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAC8gIykjHS8pJik1Mi84R3ZMR0FBR5BnbVV2q5azsKiW paK81P/lvMj/y6Kl6//u////////tuL/////////////2wBDATI1NUc+R4pMTIr/wqXC//////// ////////////////////////////////////////////////////////////wAARCABpAI8DASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDWoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiikoAWiiigAooooAKKKKA CikpaACiiigAooooAKKKKACiiigCC8gNxbtGrbSe9Zf9k3CHKyR/XJFbdU9WyLFiOxH86AKyR6pD 91g49CwP86nt79jKIbmIxSHp6GriHcit6jNUtTKsYYl5lLgjHUCgCDUluILkXKOSmRjnp7VqKwdA w6EZqG/UNZTA/wB3P5U60ObSE/7A/lQAzUJzb2jupwx4H1rLs7ea8t5R5pA3DG45BNWtakBt0VWB +fnB9quWUIgtI074yfqaAMv+yrmM5SVAfZiKmRdUhHBEgHYkGp9VYrFCw7Sqf51eoAp2t95snkzR mKX0PerlUL0q99aonMitk47Cr9ABRRRQAUUUUAFFFFABVXU/+QfL9B/MVaqlqzbbBx/eIH60AV7i /eNIoIB+8ZVyx7ZFW7WzWA72JkmPVz/SmxWUMnkTsDvVV78HAq5QBn6hcvtlgijLYX52PRRio4Ev ZbFBHLGqlcDI5x9au3pAspj/ALBosf8Ajyh/3BQBjz2DW4iDsCXfBA6Ct+s/Vztihk/uyCryOroG QgqeQRQBT1f/AI8s+jCory9ka5FrbfKxOC1O1psWir6v/Q1ZFnCLr7Rg7/rxQAWtpHbAkZZz95z1 NWKKKACiiigAooooAKKKKACsvXJMRxR+pLH/AD+NalZWoWc9zeqVX93gDdnpQBowf6iP/dH8qkpA AoAHQcUyeVYIWlboooAp6xOEthED8zn9KuQJ5cEaHqqgfpWLbCS/1AO/IBy3oB6VvUAV723+02zR g4bqM+tQaXb3FurrNwpPyjOav0UAY+tyZlijHYZP4/8A6q2Kybiynn1Ley/usj5s9q1qACiiigAo oooAKKKKACiiigAooooAKayq6lWAKnqDTqKAGRxRxLiNFUewp9FFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k= --b7e73f764cb05852c94488561e931041--

Kommentare (0)

Ihr Kommentar

Name