You are not logged in.

wcf.regNote.message

Astronic

Trainee

  • "Astronic" started this thread

Posts: 116

Location: Rhein-Main

  • Send private message

1

Monday, April 5th 2004, 8:21pm

Formailer für die eigene HP

Formailer?
Das ist eigentlich nichts anderes als eine E-mail aus einem Script zu versenden.
Ein Formular wir mit den HTML-Tag <Form> eigeleitet, deshalb nennt man das ganze Formailer.

Zuerst brauchen wir ein Formular, wo die Leute, oder Besucher ihre NAchricht eingeben:

Source code

1
2
3
4
5
6
<form method="post" action="mail.php">
Dein Name: <input name="name"><br>
Deine eMail: <input name="email"><br>
Nachricht: <textarea name="message" cols="5" rows="5"><br>
<input type="submit" name="Submit" value="Abschicken">
</form> 

Ich denke hier muss ich nichts erklären.
Einfach nur ein Formular.

So, nun kommen wir zum PHP-Teil. Diese Datei heißt mail.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
$admin "email@provider.com";  //Eure Mailadresse, dahin wird die NAchricht geschickt
$ip getenv("REMOTE_ADDR"); //ist ja immer ganz spannend zu sehen wer uns etwas geschickt hat, deshalb erfassen wir hier die IP
$host gethostbyaddr($ip); //und hier den Hostnamen

$message_sen "Ihr Nachricht wurde erfolgreich verschickt,<br>"//das bekommt der Benutzer zu sehen wenn die mail erfolgreich Verschickt wurde
$message_err "Bitte ALLE Felder korrekt ausfüllen.<br>";// und das hier, wenn er was nciht ausgefüllt hat

// das volgende wird in der mail stehen, die vaiable dazu heißt message
$message "$name hat dir Folgende Nachricht geschickt:
Name: $name
eMail: $email
IP: $ip
Host: $host 

 $message";  // das ist die eigentliche Message die der User ins Textfeld getippt hab

//das bekommt der User an seine E-mailadresse geschickt
$message_to_user "Hallo $name... 
Vielen Dank für Ihre Nachricht! 

Gruss Siteadmin";
if(preg_match("/^([_a-zA-Z0-9-}+)*@([a-zA-Z-0-9-]+.)+([a-zA-Z]{2,3})$/",$email)) {
if ($name) { //hier überprüfen wir ob der User etwas eingegeben hat
if ($nachricht) {
mail("$admin","$betreff","$message","From: $email"); //das ist das eigentliche Mailscript, das geht an uns
mail("$email","$domain_name - Admin","$message_to_user","From: $admin"); //und das geht an die mailadresse des Users 

//Falls was schiefläuft lassen wir hier PHP-eigene Fehlermeldung an den User senen
} else {
die("Fehler: $message_err");}
} else {
die("Fehler: $message_err");}
} else {
die("Fehler: $message_err");}
?>


So, da das mein erstes Tut ist, hoffe ich das es alle verstanden haben, und das mir kein Fehler unterlaufen ist...
Viel Spaß damit!
Astronic
Mod: PHP, HTML, Windows, Mac
Ich gebe gerne Hilfe und Tipps per PM, aber bitte nicht per e-Mail.
:)

davil

Beginner

Posts: 36

Location: Wien

Occupation: Entwickler

  • Send private message

2

Wednesday, April 7th 2004, 6:34pm

RE: Formailer für die eigene HP

Mir sind da ein paar Kleinigkeiten aufgefallen, die du ausbessern kannst/solltest:
  • <textarea> ist ein HTML tag, das laut Spezifikation ein end tag benötigt. Den entsprechenden Code solltest du auf das ändern:

    Source code

    1
    
    <textarea name="message" cols="5" rows="5"></textarea>

  • Über die Methode, mehrzeilige Text zu erzeugen, kann man streiten, wenn man gewisse Codeteile einrückt würde das aber auch in der Email eingerückt erscheinen. Sauberer (und vor allem übersichtlicher) wäre es so:

    PHP Source code

    1
    2
    3
    4
    5
    6
    
    // das Folgende wird in der Mail stehen, die Variable dazu heißt $message_text
    $message_text trim(stripslashes($name)) . " hat dir folgende Nachricht geschickt:\n";
    $message_text .= "eMail: " $email "\n";
    $message_text .= "IP: " $ip "\n";
    $message_text .= "Host: " $host "\n\n";
    $message_text .= $message;  // das ist die eigentliche Message die der User ins Textfeld getippt hab

  • Bei der Message vom Admin hast du das Kommentar im Mail-Text stehen.
  • Wenn eine IP-Adresse mitgeschickt wird, sollten auch Datum und Uhrzeit mitgesendet werden, weil bei dynamischen IPs ansonsten die Adresse ziemlich wertlos ist (Mail-Server stellen ja nicht unbedingt sofort zu).
  • Ich kann nirgendwo entdecken, wo $betreff definiert wird, bevor es bei der Admin-Mail verwendet wird. Ich glaub, ich muss mir endlich eine neue Brille kaufen :D
  • Das Script ist ziemlich unsicher gelöst und damit sehr flood- sowie Deep-Linking-anfällig (man kann z.B. die ganzen Übergabeparameter einfach in die Adresszeile eintippen und mit Enter die Email verschicken, wenn man diese URL anderen Usern unterjubelt könnten sie womöglich Emails verschicken ohne es zu bemerken)
  • Die Regular Expression funktioniert nicht für die neulich erlaubten Umlaut-Domains, ich hab dafür allerdings auf die Schnelle auch keine Lösung parat.
  • Generell würde ich die if-Verschachtelungen entsprechend einrücken. Das erhöht die Lesbarkeit ungemein ;)


Nicht böse sein, ich hab mir einfach gedacht ich bring hier meine Erfahrungen ein. Ich hab auch selber schon solche Mail-Scripts geschrieben :)

davil
~~~ ihr seid alle krank! ~~~ :D

Exandor

Trainee

Posts: 82

Location: Hessen

Occupation: Kommunikationstechniker (Level 2+3)

  • Send private message

3

Sunday, July 11th 2004, 2:47pm

hi, habe den Script mal bei mir eingebaut!!!!

scheint nur nicht zu funktionieren!!!!

hier mal der Link:
http://web3.208182.vserver.de/test.htm

vieleicht weiß ja einer was da schief gelaufen ist!

bekomme immer nur das angezeigt!!!
Fehler: Bitte ALLE Felder korrekt ausfüllen.

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

4

Sunday, July 11th 2004, 8:14pm

Vielleicht sollten am Anfang von dem PHP Code noch folgende
Zeilen stehen, dann gehts auch mit register_globals = off.

PHP Source code

1
2
3
$name $_REQUEST['name'];
$email $_REQUEST['email'];
$message $_REQUEST['message'];


Probiers mal damit aus ;)
einfach nach dem <?PHP in eine neue Zeile einfügen.


Ciao Ephraim

wcf.user.socialbookmarks.titel