Discussion:
Form-Mailer bei Strato geht nicht!
(zu alt für eine Antwort)
Michael F.
2005-10-22 23:38:47 UTC
Permalink
Hi Leute,

ich wollte mir einen PHP-Form-Mailer auf meine Webseite machen, habe aber
von PHP überhaupt keine Ahnung.

Auf http://www.drweb.de/php/php_formulare.shtml habe ich deshalb ein
Beispiel gefunden (siehe unten!),
welches ich ausprobieren wollte. Leider wird aber die Email bei mir nicht
abgeschickt.

Ich bin bei Strato und habe das Powerweb A Paket. PHP ist also
funktionsfähig.

Anhand einfacher Beispiele habe ich das getestet (Uhrzeit-Ausgabe usw.).
Nur der Form-Mailer scheint nicht zu funktionieren.

Muss ich bei Strato noch irgend etwas konfigurieren damit das senden der
Email funktioniert?

Wer kann mir weiterhelfen?

Viele Grüße,
Michael

---------------------------------------

kontakt.html

<html>
<head>
<title>Formmailer in PHP</title>
</head>
<body bgcolor="#ffffff">
<form method="post" action="formmailer.php">
Name:<br>
<input type="text" name="name"><br>
E-Mail:<br />
<input type="text" name="email"><br>
Nachricht:<br>
<textarea name="nachricht" cols="40" rows="7"></textarea><br>
<input type="submit" name="senden" value="Senden">
</form>
</body>
</html>

---------------------------------------
formmailer.php

<?php
$admin = "***@gmx.ch";
$subject = "PHP-Mail";
$message = "Nachricht fuer $admin von $email:\n\n";
while(list($name,$value)=each($HTTP_POST_VARS)) {
$message.="$name: $value\n\n";
}
mail($admin,$subject,$message,"From: $email");
?>
Nico Bredenbals
2005-10-23 01:43:33 UTC
Permalink
Hi!
Servus!

[Probleme mit Form-Mailer]

[Viel HTML]
Post by Michael F.
---------------------------------------
formmailer.php
<?php
$subject = "PHP-Mail";
$message = "Nachricht fuer $admin von $email:\n\n";
while(list($name,$value)=each($HTTP_POST_VARS)) {
$message.="$name: $value\n\n";
}
mail($admin,$subject,$message,"From: $email");
?>
Ich würde dunkel tippen dass Strato register_globals aus hat. Ich würde
es zumindest hoffen ;)
Also ersetzt du vielleicht mal "From: $email" durch
'From: '.$_POST['email']
Und um zu verstehen was du getan hast schaust du vielleicht mal da:

http://de2.php.net/register_globals

Und um das zu verstehen am besten auch mal allgemein da:

http://php.speedbone.de/manual/de/index.php

Dann könntest du auch den Formmailer dazu bringen die Ausgabe etwas
lesbarer zu gestalten als sie so aussehen dürfte... ;)

Und ganz wichtig: Prüf die Variable email bevor du sie so ahnungslos in
den Header schreibst! Stellst du das Script so online ist es jedem
Spammer problemlos möglich an jede beliebige Person E-Mails über deinen
Server zu schicken! Dafür liest du vielleicht das:

http://securephp.damonkohler.com/index.php/Email_Injection

und die Kommentare hiervon:

http://de3.php.net/mail

Viel Spaß beim lesen ;)

Nico
Bodo Kaelberer
2005-10-23 11:02:55 UTC
Permalink
Hi
Post by Nico Bredenbals
Post by Michael F.
while(list($name,$value)=each($HTTP_POST_VARS)) {
$message.="$name: $value\n\n";
}
mail($admin,$subject,$message,"From: $email");
?>
Ich würde dunkel tippen dass Strato register_globals aus hat. Ich würde
es zumindest hoffen ;)
Also ersetzt du vielleicht mal "From: $email" durch
'From: '.$_POST['email']
In $HTTP_POST_VARS uns $_POST stehen dieselben Daten - unabhängig von
register_globals. Wie der Name schon erkennen lässt legt man damit
fest, ob entsprechende globale Variablen erzeugt werden.

$HTTP_POST_VARS sollte also funktionieren - wobei es nicht mehr die
zeitgemässe Variable ist.


--
Nico Bredenbals
2005-10-23 12:55:17 UTC
Permalink
Bodo Kaelberer schrieb:
Morgen!
Post by Bodo Kaelberer
Hi
Post by Nico Bredenbals
Post by Michael F.
while(list($name,$value)=each($HTTP_POST_VARS)) {
$message.="$name: $value\n\n";
}
mail($admin,$subject,$message,"From: $email");
?>
Ich würde dunkel tippen dass Strato register_globals aus hat. Ich würde
es zumindest hoffen ;)
Also ersetzt du vielleicht mal "From: $email" durch
'From: '.$_POST['email']
In $HTTP_POST_VARS uns $_POST stehen dieselben Daten - unabhängig von
register_globals. Wie der Name schon erkennen lässt legt man damit
fest, ob entsprechende globale Variablen erzeugt werden.
$HTTP_POST_VARS sollte also funktionieren - wobei es nicht mehr die
zeitgemässe Variable ist.
as ist richtig. Aber wenn du dir das Script genau anschaust siehst du
das der die POST_VARS nur zum befüllen von $message herangezogen werden.
Soll wohl dem Zweck dienen das der Benutzer bloß ein neues Feld in der
Form erstellen muss und dieses dann auch per Mail mitgeschickt wird,
ohne das er den php-script updaten muss.
Die mail selbst allerdings wird an E-Mail geschickt, die vorher
nirgendwo geglobalt wird.
Oder bin ich blind? ;)

Schönen Gruß
Nico
Bodo Kaelberer
2005-10-23 17:50:26 UTC
Permalink
Hi
Post by Nico Bredenbals
Die mail selbst allerdings wird an E-Mail geschickt, die vorher
nirgendwo geglobalt wird.
Oder bin ich blind? ;)
Sicher nicht, aber vielleicht einer, der den Anfang immer überspringt
(-;

$admin ist ein hardkodierter Wert:

$admin = "***@gmx.ch";

Vielleicht kommt deswegen die Mail nicht an <-:

--
Nico Bredenbals
2005-10-23 21:16:06 UTC
Permalink
Nabend!
Post by Bodo Kaelberer
Post by Nico Bredenbals
Die mail selbst allerdings wird an E-Mail geschickt, die vorher
nirgendwo geglobalt wird.
Oder bin ich blind? ;)
Sicher nicht, aber vielleicht einer, der den Anfang immer überspringt
(-;
Ach verdammt, selektives Lesen ist ein Fluch ;)
Ich hoffe doch mal das die Adresse richtig angepasst wurde.... wurde sie
doch oder ?!?
Könnte auch sein das sein Spam-Filter sie frisst weil sie kein From im
Header hat. $email ist nämlich nicht Global ;) Oder das manche Server
sie ablehnen "From: " ist mbmn kein seriöser Header ;)

Schönen Gruß

Nico
Andreas Pothe
2005-10-23 07:01:39 UTC
Permalink
Post by Michael F.
Auf http://www.drweb.de/php/php_formulare.shtml habe ich deshalb ein
Beispiel gefunden (siehe unten!),
Pruuuuust! Dass sich jemand traut, so einen Müll auch noch zu
veröffentlichen! Ich rate dringendst davon ab, diesen Mist zu benutzen!

* Setzt registerglobals on voraus
* Übernimmt unsichere Angaben ungeprüft
--> Code Injection möglich
--> Dieses Formular kann für Spamming verwendet werden (nein, ich zeige
nicht, wie das geht, aber es funktioniert. Und zwar ziemlich einfach).

Ich rate dir: Bevor du derartige Formulare ungeprüft übernimmst, lerne erst
PHP. Der Schaden für Dich und andere kann sonst höher sein, als du dir
jemals geträumt hast.
--
http://www.pothe.de - Software für Ihr Hobby
Eisenbahn 98 (Ausgabe 2005) *** AP Modellauto
AP Münze 3 *** AP Münze 3 Pro *** AP Briefmarke *** AP Briefmarke Pro
Michael F.
2005-10-23 08:14:54 UTC
Permalink
Hallo Andreas, hallo Nico,

Danke für die Tipps.
Wenn dieses Programm Müll ist, könnt ihr mir vielleicht einen sicheren
PHP-Form-Mailer empfehlen?
Ich brauche unbedingt eine Möglichkeit zum Email-Versand von meiner Webseit
aus, möchte aber auch nicht Mist verwenden.

Danke für die Hilfe,

Michael
Post by Andreas Pothe
Post by Michael F.
Auf http://www.drweb.de/php/php_formulare.shtml habe ich deshalb ein
Beispiel gefunden (siehe unten!),
Pruuuuust! Dass sich jemand traut, so einen Müll auch noch zu
veröffentlichen! Ich rate dringendst davon ab, diesen Mist zu benutzen!
* Setzt registerglobals on voraus
* Übernimmt unsichere Angaben ungeprüft
--> Code Injection möglich
--> Dieses Formular kann für Spamming verwendet werden (nein, ich zeige
nicht, wie das geht, aber es funktioniert. Und zwar ziemlich einfach).
Ich rate dir: Bevor du derartige Formulare ungeprüft übernimmst, lerne erst
PHP. Der Schaden für Dich und andere kann sonst höher sein, als du dir
jemals geträumt hast.
--
http://www.pothe.de - Software für Ihr Hobby
Eisenbahn 98 (Ausgabe 2005) *** AP Modellauto
AP Münze 3 *** AP Münze 3 Pro *** AP Briefmarke *** AP Briefmarke Pro
Stefan Faster
2005-10-23 09:23:52 UTC
Permalink
Post by Michael F.
Danke für die Tipps.
Wenn dieses Programm Müll ist, könnt ihr mir vielleicht einen sicheren
PHP-Form-Mailer empfehlen?
Ich brauche unbedingt eine Möglichkeit zum Email-Versand von meiner
Webseit aus, möchte aber auch nicht Mist verwenden.
Schau doch mal in die aktelle ct.
Dort ist erklärt worauf man alles achten sollte/muss.
Ein fertiges Skript kann von Heise.de runtergeladen werden.
Link: http://www.heise.de/ct/ftp/05/22/208/
Um es zu verstehen bitte den Artikel lesen...
Bodo Kaelberer
2005-10-23 10:57:23 UTC
Permalink
Post by Stefan Faster
Ein fertiges Skript kann von Heise.de runtergeladen werden.
Link: http://www.heise.de/ct/ftp/05/22/208/
Wie kann man einen so mies formatierten Code in einer Zeitung
veröffentlichen?

--
Stefan Faster
2005-10-23 12:33:28 UTC
Permalink
Post by Bodo Kaelberer
Post by Stefan Faster
Ein fertiges Skript kann von Heise.de runtergeladen werden.
Link: http://www.heise.de/ct/ftp/05/22/208/
Wie kann man einen so mies formatierten Code in einer Zeitung
veröffentlichen?
:))) das ist wahr, die Formatierung ist echt mies.
Im Artikel sind nur die wichtigtes Codeschnipsel gelistet und erklärt.
Matthias Hu.
2005-10-23 19:26:58 UTC
Permalink
Sehe ich richtig, dass dieser Kauderwelsch genau einen Punkt nach dem "@"
zulässt?
Johannes Mueller
2005-10-23 20:39:28 UTC
Permalink
Post by Matthias Hu.
Sehe ich richtig, dass dieser Kauderwelsch genau einen Punkt nach
Das siehst du falsch! Denn der Punkt in [\w.-] schliesst beliebige
Zeichen (also auch Punkte) ein, der Ausdruck sagt nur, dass von rechts
nach links 2-6 buchstaben kommen müssen und dann ein Punkt kommen
_MUSS_!

Übrigens gibt es einen fehler bei <at>xxx.COM oder <at>xxx.DE adressen,
weil nur auf kleinbuchstaben gematcht wird. Warum man [\w.-] macht ist
mir ehrlich gesagt auch nicht wirklich klar, denn im Punkt sind sowohl
der Strich als auch die Wordcharacter schon enthalten.

Der Ausdruck könnte auch durch:

'absender' => '/^[^\s]{2,}\@[^\s]{2,}\.[a-z]{2,6}$/i',

dargestellt werden.

Ich hoff jetzt mal, dass ich keinen Mist erzählt habe...
Johannes
--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Niels Braczek
2005-10-23 22:11:45 UTC
Permalink
Post by Johannes Mueller
Post by Matthias Hu.
Sehe ich richtig, dass dieser Kauderwelsch genau einen Punkt nach
Das siehst du falsch! Denn der Punkt in [\w.-] schliesst beliebige
Zeichen (also auch Punkte) ein, der Ausdruck sagt nur, dass von rechts
nach links 2-6 buchstaben kommen müssen und dann ein Punkt kommen
_MUSS_!
Der Punkt in einer Zeichenklasse (also in eckigen Klammern) steht genau
für den Punkt, *nicht* für ein beliebiges Zeichen.

MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------------´
Matthias Hu.
2005-10-23 22:53:15 UTC
Permalink
Ich bin ja aus Erfahrung etwas skeptisch, wenn es um die Überprüfung von
E-Mail-Adressen geht. Sicherheit hin oder her, aber auf verschiedenen
Websites ist mir schon der Dienst verweigert worden, wenn ich beispielsweise
meine Adresse @uu.se (weil nur 2 Buchstaben in der Domain) oder
@maitre.physik.uni-kl.de (weil mehr als ein Punkt) angeben wollte.
Wäre es nicht generell sinnvoller, die RegExps so gestalten, dass man die
für Injections kritischen Zeichen explizit ausschließt und meinetwegen die
Anzahl der "@" auf 1 begrenzt - sonst aber keine Sanktionen bezüglich der
Form der Adresse einbaut? Irgendwo auf der Welt gibt es sonst immer eine
Domain, die doch noch durchs Raster fällt...

Gruß
Matthias
Niels Braczek
2005-10-24 01:25:31 UTC
Permalink
Post by Matthias Hu.
Ich bin ja aus Erfahrung etwas skeptisch, wenn es um die Überprüfung von
E-Mail-Adressen geht. Sicherheit hin oder her, aber auf verschiedenen
Websites ist mir schon der Dienst verweigert worden, wenn ich beispielsweise
@maitre.physik.uni-kl.de (weil mehr als ein Punkt) angeben wollte.
Wäre es nicht generell sinnvoller, die RegExps so gestalten, dass man die
für Injections kritischen Zeichen explizit ausschließt und meinetwegen die
Form der Adresse einbaut? Irgendwo auf der Welt gibt es sonst immer eine
Domain, die doch noch durchs Raster fällt...
Genau deshalb lassen sich E-Mail-Adressen nicht so einfach syntaktisch
prüfen[1]. ZB. ist !@? eine lt. RfC gültige Adresse. Die einzige
funktionierende Methode ist den Server, zu dem die angegebene Adresse
gehören soll, zu fragen, ob ihm die Adresse schmeckt.

fn1. Eine RegExp, die das angeblich können soll, ist knapp 10KB groß.

MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------------´
Matthias Esken
2005-10-24 16:05:23 UTC
Permalink
Post by Niels Braczek
Genau deshalb lassen sich E-Mail-Adressen nicht so einfach syntaktisch
funktionierende Methode ist den Server, zu dem die angegebene Adresse
gehören soll, zu fragen, ob ihm die Adresse schmeckt.
Und darauf antworten die wenigsten Server.

Gruß,
Matthias
Niels Braczek
2005-10-24 21:16:09 UTC
Permalink
Post by Matthias Esken
Post by Niels Braczek
Genau deshalb lassen sich E-Mail-Adressen nicht so einfach syntaktisch
funktionierende Methode ist den Server, zu dem die angegebene Adresse
gehören soll, zu fragen, ob ihm die Adresse schmeckt.
Und darauf antworten die wenigsten Server.
Weswegen das Vorhaben eigentlich gleich zu den Akten gelegt werden kann.
Eine einfache Überprüfung (Ist das '@' vorhanden? Ist der String länger
als 2 Zeichen) ist in praxi nicht schlechter als jede andere
pseudo-genaue Methode.

MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------------´
Loading...