Formmailer Attachment
kati
- php
0 Tom
Hi, ich hab ein Formular, mit einem Datei "Upload". Diese Datei (file1) wird aber nicht irgendwo gespeichert, sondern soll als Attachtment in einem Email versendet werden.
Aber genau dies wird nicht gemacht. Ich bekomme nicht einmal eine leere mail.
Den Code hab ich von irgendwo kopiert und angepasst.
Sieht jemand einen Fehler?
Danke schonmal im Vorraus
<?php
$strEmpfaenger = "exampleEmpf@example.ch";
$strFrom = "exampleFROM@examlpe.ch";
$strSubject = 'Subject EXAMPLE';
$strDelimiter = " = ";
$strMailtext="INHALT von EMAIL";
$file = $file1;
$file_name = $_FILES["file1"]["name"];
$from = $strFrom;
$boundary = strtoupper(md5(uniqid(time())));
$mail_header = "From:Test <$from>\n";
$mail_header .= "MIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$message";
$file_content = fread(fopen($file,"r"),filesize($file));
$file_content = chunk_split(base64_encode($file_content));
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: application/octetstream; name="$file_name"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="$file_name"";
$mail_header .= "\n\n$file_content";
$mail_header .= "\n--$boundary--";
mail($strEmpfaenger,$strSubject,$strMailtext,$mail_header);
?>
Hello,
Sieht jemand einen Fehler?
Ja. Obwohl Du Dein Script nicht so schön sortiert hast.
EVA lässt grüßen :-)
$file_content = chunk_split(base64_encode($file_content));
ist vermutlich dafür verantwortlich, dass es nicht funktioniert.
http://de.php.net/manual/de/function.chunk-split.php
end
Die Zeilenend-Sequenz. Standardwert ist "\r\n".
und die wird bei Dir hier benutzt.
Wenn Du die Mail nun über ein "sendmail" auf einem Linux-OS versendest, und nicht direkt über Blockbuffer und Port 25 an den MTA gibst, dann verarscht Dich das sendmail.
Es machrt aus jedem "\r\n" ein "\r\n\r\n", weil es sowohl das \r als auch das \n zu einem vollständigen "\r\n" ergänzt.
Gib also als Zeilenendsequenz nur "\n" an und Deine mail wird ankommen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
hi!
Danke für dia antwort!
»»Es machrt aus jedem "\r\n" ein "\r\n\r\n", weil es sowohl das \r als auch das \n zu einem vollständigen "\r\n" ergänzt.
Gib also als Zeilenendsequenz nur "\n" an und Deine mail wird ankommen.
versteh ich nicht so ganz
"string chunk_split ( string $body [, int $chunklen [, string $end ]] )
end
Die Zeilenend-Sequenz. Standardwert ist "\r\n". "
Muss ich das jetzt so machen:
$file_content = chunk_split(base64_encode($file_content) "/n");
(man merkts wohl, ich komm net draus ;))
Dankschän
Hello,
versteh ich nicht so ganz
"string chunk_split ( string $body [, int $chunklen [, string $end ]] )
end
Die Zeilenend-Sequenz. Standardwert ist "\r\n". "Muss ich das jetzt so machen:
$file_content = chunk_split(base64_encode($file_content) "/n");
fast - aber trotzdem vorbei :-)
$file_content = chunk_split(base64_encode($file_content) "\n");
und tatsächlich die doppelten Häkchen nehmen!
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
fast - aber trotzdem vorbei :-)
$file_content = chunk_split(base64_encode($file_content) "\n");
und tatsächlich die doppelten Häkchen nehmen!
Sorry, jetzt habe ich selber vorbeigeschossen.
Der Parameter 'chunklen' darf natürlich nicht ausgelassen werden. Und ein paar Kommata sind auch nicht übel *tztz*
$file_content = chunk_split(base64_encode($file_content), 76, "\n");
so wäre nun hoffentlich ricbtig.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi!
Danke nochmals...
Ich verzweifle bald.. funktioniert immernoch nicht. Irgendwo ist hier noch der Wurm drin. Kannst jemand hier nochmals einen blick draufwerfen? Danke viiiiiiel mals!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>EM2008 - Flyer und Plakate günstig drucken - Bestätigung
</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
$file=$_GET['file1']; //Das ist doch ok, wenn ich auf der vorhergehenden seite ein <input type="file" name="file1" > hatte?
$file_name = $_FILES["file1"]["name"];
$from = "bla@bla.de";
$strEmpfaenger="bla2@bla.de";
$strSubject="subject";
$strMailtext="Wird oben genauer definiert";
$boundary = strtoupper(md5(uniqid(time())));
$mail_header = "From:Test <$from>\n";
$mail_header .= "MIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$message";
$file_content = fread(fopen($file,"r"),filesize($file));
$file_content = chunk_split(base64_encode($file_content), 76, "\n");
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: application/octetstream; name="$file_name"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="$file_name"";
$mail_header .= "\n\n$file_content";
$mail_header .= "\n--$boundary--";
mail($strEmpfaenger,$strSubject,$strMailtext,$mail_header);
or die("Die Mail konnte nicht versendet werden.");
echo " <table><tr>
<td>ALLES OK</td>
<td> </td>
<td> </td>
</tr></table>";
?>
</body>
</html>
Und nochmals: DANKE!
Hello,
ein Fehler ist noch im Content-Type des Attachments
falsch: $mail_header .= "\nContent-Type: application/octetstream; name="$file_name"";
$mail_header .= "\nContent-Type: application/octet-stream; name="$file_name"";
Es ist eigentlich auch eine Unsitte, die Newlines _vor_ den Headern zu notieren, denn die Header werden damit abgeschlossen und man könnte so leicht mal ein abschließendes Newline vergessen...
Wenn ich bei der "Komposition" von MIME-Mails nicht genau weiß, wie die aussehen sollten, bau ich mir immer eine Muster mit einem Mailclient...
So würde es z.B. mit Outlook Express aussehen. Man muss nur noch den ganzen Unsinn rausschmeißen, aber hat dann die Struktur als Beispiel.
Return-Path: bitworks@online.de
X-Original-To: tom@bitworks.de
Delivered-To: web1p1@h93968.serverkompetenz.net
Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.188])
by h93968.serverkompetenz.net (Postfix) with ESMTP id 4C53F21C3C0
for tom@bitworks.de; Tue, 18 Dec 2007 13:12:32 +0100 (CET)
Received: from pc14 (p5B03C3B4.dip0.t-ipconnect.de [91.3.195.180])
by mrelayeu.kundenserver.de (node=mrelayeu0) with ESMTP (Nemesis)
id 0MKwh2-1J4bL42aqH-00022y; Tue, 18 Dec 2007 13:14:22 +0100
Message-ID: 001901c8416f$bb0d3780$2c65a8c0@pc14
From: bitworks@online.de
To: tom@bitworks.de
Subject: Attachment
Date: Tue, 18 Dec 2007 13:15:50 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0016_01C84178.1C72DDB0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4927.1200
Disposition-Notification-To: bitworks@online.de
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4927.1200
X-Provags-ID: V01U2FsdGVkX18ZKCVly+qqKRe2W304JdeiE8SlJiVLYPJZU1V
N8XOiLyHLqLxshUoGW5B3ys7YTQxwkUAnR/zkaraNQHLWOhLc5
J2LyQRCJ1X4O7nMl/OiDlpRObOgOyMc
X-UIDL: Eon!!=1C!!h"!!n7e"!
This is a multi-part message in MIME format.
------=_NextPart_000_0016_01C84178.1C72DDB0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
Mail mit Anhang
---------------------------------------------
bitworks®
Mühlenstraße 19
D-37444 Sankt Andreasberg
Tel 05582/999881
Fax 05582/999882
bitworks@online.de
------=_NextPart_000_0016_01C84178.1C72DDB0
Content-Type: text/plain;
name="attachment.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="attachment.txt"
Textanhang
Nur ein Test
------=_NextPart_000_0016_01C84178.1C72DDB0--
Hier ist z.B. ersichtlich, dass zwischen dem Disposition-Header und dem Anhang eine Leerzeile steht...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
Deine Zeile:
$mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
die aus Outlook Express:
boundary="----=_NextPart_000_0016_01C84178.1C72DDB0"
siehst Du den Unterschied?
Es fehlen die begrenzenden Häkchen für die Boundary
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom