Mail per php

  • Themenstarter Themenstarter flohhh
  • Beginndatum Beginndatum
F

flohhh

Hi!

Ich habe eine frage:

Hat vielleicht schon mal irgendwer ein script für eine mail per php geschrieben!

Der User, der auf der Internet-Seite verschiedene Felder ausfüllt, klickt auf einen button absenden und die ausgefüllten felder werden an meine e-mail adresse geschickt!

Hab eh schon unter den Links geschaut, aber leider nix gefunden!

Wer sehr lässig, wenn mir wer das script mit dazugehöriger html-seite schicken könnte oder mir ein gutes tut sagen könnt!

MfG
Flohhh (flohhh@gmx.at)
 
ein kurzes Tut

eine Mail aus einem PHP-Skript zu versenden ist eine der leichtesten Aufgaben mit PHP.
Zunächst musst Du in deinem HTML-Formular jedem Eingabefeld einen Namen zuweisen. Im <FORM>-Tag gibst Du als Action Dein Skript an, und als Methode "Post"
Im Skript kannst Du dann auf die Inhalte der Variablen zugreifen, indem Du einfach den Feldnamen mit vorangestelltem $ verwendest.
Der Befehl zum versenden der Mail lautet so:
PHP:
mail($recipient,$subject,$message,"From: $sender <$frommail>";

Hier ein einfaches Beispiel:
Code:
HTML-Formular: 
<FORM ACTION="email.php" METHOD="post">
Empfaenger:<INPUT TYPE="text" NAME="tomail">
Name des Absenders:<INPUT TYPE="text" NAME="sender">
Email des Absenders:<INPUT TYPE="text" NAME="frommail">
Betreff:<INPUT TYPE="text" NAME="subject">
Nachricht:<TEXTAREA COLS="30" ROWS="10" NAME="message"></TEXTAREA>
<INPUT TYPE="submit">
</FORM>
PHP:
// die Datei email.php:
$tomail = stripslashes($tomail);
$sender = stripslashes($sender);
$frommail = stripslashes($frommail);
$subject = stripslashes($subject);
$message = stripslashes($message);
// die Funktion stripslashes() entfernt den Backslash vor Sonderzeichen
mail($tomail,$subject,$message,"From: $sender <$frommail>";

Das war's schon. Einfach, nicht? :)

Im letzten Teil ("From: ...") kannst Du auch alle anderen Email-Header mit angeben, die Du brauchst. (z.B. CC:, BCC:, Content-Type:, etc.)

Etwas schwieriger wird es, wenn Du auch eine Funktion einbauen willst, um Dateien an die Email anzuhängen.

Im <FORM>-Tag muss zusätzlich ENCTYPE="multipart/form-data", und ein <INPUT TYPE="file" NAME="file"> stehen.

der Header in der Mail-Funktion wird um folgendes erweitert:
PHP:
$header = "From: $ sender <$frommail>\nMIME-Version: 1.0\n
  Content-Type: multipart/mixed; boundary=\"========1234567\"";
// In EINE Zeile schreiben !!!!!

Die Nachricht wird so codiert:
PHP:
$fd = fopen($file, "r");
$anhang = chunk_split(base64_encode(fread( $fd, filesize($file))));
fclose($fd);
$message = "--========1234567\nContent-Type: text/plain; charset=\"us-ascii\"\n
  Content-Transfer-Encoding: 7bit\n\n\n".$message."\n--========1234567\n
  Content-Type: $file_type; name=$file_name\nContent-Transfer-Encoding:
  base64\nContent-Disposition: attachment; filename=\"$file_name\"\n\n".$anhang;
// die letzten vier Zeilen in EINE Zeile schreiben !!!!!

ok, ok, war jetzt etwas unübersichtlich :-) aber mit ein bisschen Probieren sollte das klappen.
Ein Tip: einfach mal ein Mail mit Anhang "normal" an sich selbst verschicken, und sich den Quelltext der Mail anzeigen lassen.
Dann mit der vom Skript versandten Mail vergleichen. (so hab ich's auch gemacht ... bis es schließlich gefunzt hat :) )

So. Viel Spaß, beim ausprobieren.
Wenn noch Fragen sind, könnt ihr diese ja hier posten.

Gruß
Dunsti
 
großes DANKE

Also ich dank dir erst mal ganz viel, das du mir das geschrieben hast!

Schaut echt einfach aus, ich werds mal probieren!

EIne frage noch!

Gibts auch ne möglichkeit, den empfänger fix zu machen (also meine e-mail?)

Für eine Antwort wär ich dankbar!

MfG
Flohhh
 
alles was mit $ anfängt, sind Variablen, denen Du natürlich auch fixe Werte zuweisen kannst.
PHP:
$tomail = "ich@zuhause.de";
Entsprechend lässt Du dieses Eingabefeld im Formular einfach weg :)

Gruß
Dunsti
 
Besser hät ichs nicht beschreiben können ;)
Nur es wird nicht funktionieren, solange in
der php.ini kein SMTP-Server angegeben wurde :D
MfG d0mest0s
 
Also bitte einmal noch Hilfe :-)

Hi nochmal!

Also, ich habs so ausprobiert:ich hab ne html-seite gmacht, die aktion von dunsti in den body-bereich eingefügt und die email.php3 beide in das htdocs verzeichnis vom apache-server gelegt, dann geb ich im browser folgendes ein: localhost/mail.htm dann erscheint die seite mit den eingabefeldern, dann wenn ich alles ausgefüllt hab, und auf senden klick, macht sich das php auf und zeigt mir den code!

Ok, das kann auch nicht gehen, weil ich keinen smtp angegeben hab!

Die frage is nur welchen, ich hab meine mail bei gmx Smtp = (mail.gmx.net) oder bei meinem provider (mail.kabsi.at)?

Wenn mir das noch wär beantworten könnt, bin ich echt happy!

MfG
Flohhh
 
Original geschrieben von d0mest0s
Besser hät ichs nicht beschreiben können ;)
Nur es wird nicht funktionieren, solange in
der php.ini kein SMTP-Server angegeben wurde :D
MfG d0mest0s

öhhh, muss das sein? ich hab 2 verschiedene php server bei denen die mailfunktion auch ohne php.ini läuft.....
 
SMTP-Server ist dafür nicht erforderlich !!!


ABER: auf dem Rechner, der die Mails verschickt muss der UNIX-Dienst "sendmail" laufen, und der muss in der PHP.INI eingetragen sein.

Auch für Windows gibt es einen sendmail-Dienst (hab ich mal irgendwo im WWW gesehen, hab aber leider den Link net mehr.... probier mal die Suchfunktion, hatte das schonmal gepostet irgendwann)

Das Ganze hat also nix mit Deinem Provider, bzw. Deinem Emailaccount dort zu tun ;)

@MiniMe: Auf den Servern gibt es mit Sicherheit eine PHP.INI :D aber die wurde wahrscheinlich von Deinem Hoster schon richtig eingestellt.


Dunsti
 
Original geschrieben von Dunsti
SMTP-Server ist dafür nicht erforderlich !!!
@MiniMe: Auf den Servern gibt es mit Sicherheit eine PHP.INI :D aber die wurde wahrscheinlich von Deinem Hoster schon richtig eingestellt.

is jaa schön... :-) *faul ins bett fall*
 
hmm gute beschreibung Dunsti aber bei mir funtzt es nicht!

es wird immer bei in der message
eine lange zeichenfole(wZzEyNTJcdWMxIF...) über mehrere zeilen
im mail angezeigt!

was mach ich falsch?????

GREEZ

N
O
X
 
Zuletzt bearbeitet:
Zurück