Mehrere Attachments versenden

Hallo

Folgendes Script versendet eine E-Mail mit Attachment.
Was mir einfach nicht gelingen will: wie versendet man zwei Attachments? Welcher Teil des Scripts muss wiederholt werden?
Wer hat einen Tipp?

Gruss
Borsi

<?php $to = $_POST['to'];
$from = $\_POST['from']; $subject = $\_POST['subject']; $message = $\_POST['message']; $fileatt = $\_FILES['fileatt']['tmp\_name']; $fileatt\_type = $\_FILES['fileatt']['type']; $fileatt\_name = $\_FILES['fileatt']['name']; $headers = "From: $from"; if (is\_uploaded\_file($fileatt)) { $file = fopen($fileatt,'rb'); $data = fread($file,filesize($fileatt)); fclose($file); $semi\_rand = md5(time()); $mime\_boundary = "==Multipart\_Boundary\_x{$semi\_rand}x"; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime\_boundary}\""; $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime\_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; $data = chunk\_split(base64\_encode($data)); $message .= "--{$mime\_boundary}\n" . "Content-Type: {$fileatt\_type};\n" . " name=\"{$fileatt\_name}\"\n" . //"Content-Disposition: attachment;\n" . //" filename=\"{$fileatt\_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n" . "--{$mime\_boundary}--\n"; } $ok = @mail($to, $subject, $message, $headers); if ($ok) { echo " Mail sent! Yay PHP!"; } else { echo " Mail could not be sent. Sorry! "; } ?\>

Hallo Marcus

Besten Dank für Deinen Input!

Die Schlaufe ist eigentlich nicht mein Problem. Meine Sorge ist: Welche Parameter müssen für das 2. Attachment übbermittelt werden? Nochmals mit $headers .= „\nMIME-Version: 1.0\n“ . beginnen oder erst weiter unten ansetzen? Habe jede denkbare Variante durchgespielt, leider vergeblich. Müssen eventl. 2 Attachments durch ein spezielles Kommando (irgend ein Trenner) getrennt werden?

Gruss
Borsi

Hallo Marcus

Besten Dank für Deinen Input!

Die Schlaufe ist eigentlich nicht mein Problem. Meine Sorge
ist: Welche Parameter müssen für das 2. Attachment
übbermittelt werden?

so sollte der quelltext einer mime-email fuer attachements aussehen:

From:
To:
Subject:
MIME-Version:
Content-Type: multipart/mixed; boundary=mytinylittleboundary

this is a multipart blablabla

--mytinylittleboundary
Content-Type: text/whatever

hier der mailtext

--mytinylittleboundary
Content-type: application/octet-stream; name="foo.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="foo.pdf"

qqqquuuuuueeeertzzz

--mytinylittleboundary
Content-type: application/octet-stream; name="foo.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="foo.pdf"


qqqquuuuuueeeertzzz

--mytinylittleboundary--

will heissen:
jeder part ist mit:

--boundaryname

und den content-* headern evtl. filename etc. einzuleiten
die mail ist mit:

--boundary--

zu beenden.

es wird wohl empfohlen newlines nach als \r\n zu notieren.

zur beachtung:
http://rfc.sunsite.dk/rfc/rfc2557.html
http://rfc.sunsite.dk/rfc/rfc2045.html ff.

Hallo

Danke für die Angaben.
Mit dem folgenden Code kriege ich tatsächlich die 3 GIF-Dateien zugestellt. Name und Grösse der Dateien stimmen. Aber nur die erste Grafik kann ich ansehen, bei den anderen 2 GIFS erscheint nur Buchstabensuppe. Haste nen Tipp, was am folgenden Code fehlt?

$Trenner = md5(uniqid(time()));
$Headers .= „\n“;
$Headers .= „MIME-Version: 1.0“;
$Headers .= „\n“;
$Headers .= „Content-Type: multipart/mixed; boundary=$Trenner“;
$Headers .= „\n\n“;
$Headers .= „This is a multi-part message in MIME format“;
$Headers .= „\n“;
$Headers .= „–$Trenner“;
$Headers .= „\n“;
$Headers .= „Content-Type: text/plain“;
$Headers .= „\n“;
$Headers .= „Content-Transfer-Encoding: 8bit“;
$Headers .= „\n\n“;
$Headers .= $Mailtext;
$Headers .= „\n“;
$Headers .= „–$Trenner“;
$Headers .= „\n“;
$Headers .= „Content-Type: image/gif; name=$Dateiname1Mail“;
$Headers .= „\n“;
$Headers .= „Content-Transfer-Encoding: base64“;
$Headers .= „\n“;
$Headers .= „Content-Disposition: attachment; filename=$Dateiname1Mail“;
$Headers .= „\n\n“;
$Dateiinhalt1 .= fread(fopen($Dateiname1, „r“), filesize($Dateiname1));
$Headers .= chunk_split(base64_encode($Dateiinhalt1));
$Headers .= „\n“;
$Headers .= „–$Trenner“;

$Headers .= „Content-Type: image/gif; name=$Dateiname2Mail“;
$Headers .= „\n“;
$Headers .= „Content-Transfer-Encoding: base64“;
$Headers .= „\n“;
$Headers .= „Content-Disposition: attachment; filename=$Dateiname2Mail“;
$Headers .= „\n\n“;
$Dateiinhalt2 .= fread(fopen($Dateiname2, „r“), filesize($Dateiname2));
$Headers .= chunk_split(base64_encode($Dateiinhalt2));
$Headers .= „\n“;
$Headers .= „–$Trenner“;

$Headers .= „Content-Type: image/gif; name=$Dateiname3Mail“;
$Headers .= „\n“;
$Headers .= „Content-Transfer-Encoding: base64“;
$Headers .= „\n“;
$Headers .= „Content-Disposition: attachment; filename=$Dateiname3Mail“;
$Headers .= „\n\n“;
$Dateiinhalt3 .= fread(fopen($Dateiname3, „r“), filesize($Dateiname3));
$Headers .= chunk_split(base64_encode($Dateiinhalt3));
$Headers .= „\n“;

Hallo

Danke für die Angaben.
Mit dem folgenden Code kriege ich tatsächlich die 3
GIF-Dateien zugestellt. Name und Grösse der Dateien stimmen.
Aber nur die erste Grafik kann ich ansehen, bei den anderen 2
GIFS erscheint nur Buchstabensuppe. Haste nen Tipp, was am
folgenden Code fehlt?

nein, faellt mir nix ein, wie sieht denn der quellcode der erzeugten mail aus?

Hallo

Jetzt hab ich den Fall geknackt, war wie oftmals ein Detail. Nach dem Trenner fehlte ein „\n“.
Besten Dank für Eure Inputs!

Gruss
Borsi

Und hier ist die Lösung:

$Headers .= „Content-Type: image/gif; name=$Dateiname2Mail“;
$Headers .= „\n“;
$Headers .= „Content-Transfer-Encoding: base64“;
$Headers .= „\n“;
$Headers .= „Content-Disposition: attachment; filename=$Dateiname2Mail“;
$Headers .= „\n\n“;
$Dateiinhalt2 .= fread(fopen($Dateiname2, „r“), filesize($Dateiname2));
$Headers .= chunk_split(base64_encode($Dateiinhalt2));
$Headers .= „\n“;
$Headers .= „–$Trenner“;
$Headers .= „\n“;