mail() mit dateianhang
Daniel
- php
Ahoi @ll,
ich finde hier: http://de2.php.net/manual/de/function.mail.php
kein beispiel zum versenden von mails mit Anhang, könnte mir da vll jmd
weiterhelfen?
MfG
Hallo Daniel,
kein beispiel zum versenden von mails mit Anhang, könnte mir da vll jmd
weiterhelfen?
PHP-FAQ: Wie kann ich ein Attachment mit einer Mail versenden?
Grüße aus Nürnberg
Tobias
Ahoi Tobias Kloth,
PHP-FAQ: Wie kann ich ein Attachment mit einer Mail versenden?
sieht intressant aus, habe nun auch ein paar informationen gefunden.
nur eins versteh ich nicht, also die mail soll einen text/plain oder
text/html inhalt haben und einen dateianhang mit belibigem dateityp.
Also mach ich
$to = "niemand@daheim.de";
$from = "baer.mit.der.rebschaer@weinberg.de";
$betreff = "gibts nicht";
$msg = "Nachricht in html oder plain, ist noch nicht klar";
$msg .= "base64 codierte Datei"; // wie auch immer das dies geht.
$headers = "Content-Type: text/plain;\r\n";
$headers .= "Content-Type: dateityp; name="dateiname";\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment\r\n";
oder hab ich da was falsch verstanden? woher weis der browser,
emailclient oder whatever wann der base64 teil beginnt? wo ist da die
zuordung? den Content typ in $msg reinschreiben kann ja nicht die
lösung sein, genausowenig die nachricht in den header, oder doch?
MfG
Hallo,
ein gutes E-Mail-Script mit Dateianhang findest du hier: http://mylittlehomepage.net/form_mail_skript
Gruß
Thomas L.
Ahoi Thomas L.,
ein gutes E-Mail-Script mit Dateianhang findest du hier: http://mylittlehomepage.net/form_mail_skript
ich würde das aber gerne selber machen, und vorallem verstehen. nutze
nicht gern dinge von anderen leuten. zumindest nicht ohne ahnung davon
zu haben.
MfG
Hallo,
ich würde das aber gerne selber machen, und vorallem verstehen. nutze
nicht gern dinge von anderen leuten. zumindest nicht ohne ahnung davon
zu haben.
da habe ich doch auch nichts dagegen, aber hier steht zumindest schon mal in etwa wie es geht. Ich habe auch mein eigenes Script zusammengeschrieben - hat aber auch eine Weile gedauert und das mit dem Dateianhang habe ich mir auch hier abgeschaut. Am besten ist aber, du schickst dir selbst mal eine Mail mit Anhang und schaust dir den Quelltext (mit Headerzeilen) an --> im Outlook unter Datei -> Eigenschaften.
Wichtig für das Script ist der Teil:
// Datei einlesen und codieren:
$datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
// Boundary festlegen: (Trenner, der E-Mail-Bestandteile von einander trennt)
$boundary = md5(uniqid(rand()));
// Mail-Header:
$mail_header = "From: ".$mail_name." <".$mail_email.">\n";
$mail_header .= "X-Sender-IP: ".$ip."\n";
$mail_header .= "MIME-Version: 1.0\n";
$mail_header .= "Content-Type: multipart/mixed; boundary="".$boundary.""\n";
$mail_header .= "This is a multi-part message in MIME format.\n";
// Mail-Text:
$mail_header .= "--".$boundary;
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n".$text;
// Attachment:
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
$mail_header .= "\n\n".$datei_content;
// Ende:
$mail_header .= "\n--".$boundary."--";
// Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
mail($mailto,$mail_subject,"",$mail_header)
Gruß
Thomas L.
Ahoi Thomas L.,
// Datei einlesen und codieren:
$datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
vielen dank, das wars, ich hab die datei per file() gehlt, mit einem
foreach() in einen string umgewandeln und dann nur ein base64_encode
gemacht. den rest hatte ich schon von anderen quellen dank google
irgendwie zusammengelsen.
Wobei es in meinem fall keine frisch upgeloadede datei ist sondern eine "stationäre".
$mail_header .= "X-Sender-IP: ".$ip."\n";
^^^^^^wie bekomm ich die? darf ich mir da was ausdenken?
$mail_header .= "\n--".$boundary."--";
hier hatte ich noch ein \n hintendrann, war wohl auch etwas am misslingen schuld, jetzt funktioniert es aber. nur eine frage noch, was ist wenn es mehrere dateien sind? immerwieder:
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
$mail_header .= "\n\n".$datei_content;
oder nur ein Dateicontent nach dem andern?
Vielen dank auf jedenfall an dich, hast mir sehr weitergeholfen.
MfG
Hallo,
$mail_header .= "X-Sender-IP: ".$ip."\n";
^^^^^^wie bekomm ich die? darf ich mir da was ausdenken?
$ip = $_SERVER["REMOTE_ADDR"];
$mail_header .= "\n--".$boundary."--";
hier hatte ich noch ein \n hintendrann, war wohl auch etwas am misslingen schuld, jetzt funktioniert es aber. nur eine frage noch, was ist wenn es mehrere dateien sind? immerwieder:
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
$mail_header .= "\n\n".$datei_content;
ich denke, so müsste es wohl gehen. Du brauchst dann aber auch ein zusätzliches Formularfeld. Allerdings habe ich mich damitnoch nicht befasst. Probier es doch einfach mal aus oder schick dir auch hier erst mal eine Mail mit mehreren Anhängen. Hier kannst du dann ja sehen, wie der Header aussieht und dementsprechend das Sript aufbauen.
Gruß
Thomas L.
Ahoi Thomas L.,
$ip = $_SERVER["REMOTE_ADDR"];
danke.
ich denke, so müsste es wohl gehen.
dann werde ich das bei gelegenheit ausprobieren.
Du brauchst dann aber auch ein zusätzliches Formularfeld.
nein brauche ich nicht. zumindest nicht unbedingt, momentan sieht es
bei meinem projekt so aus das zu einem Artikel Dateien runtergeladen
werden können. die werden mit dateinamen aufgelistet und man klickt
auf eine. und hier gibt es 2 Fälle, fall eins, die datei darf/kann
direkt runtergeladen werden. also öffnet sich der typische DL-Dialog.
und fall 2, die datei ist "geschützt", also muss der Benutzer Name,
Email etc. angeben und bekommt dann eine eMail die als anhang die
entsprechende Datei enthält. Das ganze soll evt. einmal erweitert
werden das vor den Dateien Chackboxen sind, der Benutzer dort haken
reinmacht und auf einen Button klickt der z.B. "Dateien anfordern"
heißt. naja das ganze steckt noch in den Kinderschuhen. das versenden
mit einem anhang klappt, und wenn ich mal zeit hab, bzw. es soweit ist
schau ich mir das mal an.
Probier es doch einfach mal aus oder schick dir auch hier erst mal eine Mail mit mehreren Anhängen.
das mit dem sich selbst ne mail zu schicken scheint nicht zu
funktionieren. ich habe mir selbst eine eMail geschickt, diese hatte
aber scheinbar keinen header, zumindest habe ich ihn nicht entdeckt
(im gegensatz zu denen wo ich mir mit dem script schickte) naja Outlook halt.
MfG