Borsi
14. Juni 2004 um 17:22
1
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! ";
}
?\>
Borsi
15. Juni 2004 um 10:49
3
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.
Borsi
18. Juni 2004 um 15:38
5
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?
Borsi
21. Juni 2004 um 15:32
7
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“;