Ich habe mit folgendem php-script einen Mailer laufen. Ein Provider hat dieses script allerdings kürzlich gesperrt, da er behauptet es sein eine Spamschleuder.
Kann das jemand bestätigen und den angeblichen Fehler im script entdecken und benennen bzw. einen Tipp für einen Spamsicheren Mailer?
Man kann (unter anderem) über $_POST['name'] mittels Zeilenumbruch weitere Header einfügen. Beispw. für CC/BCC usw. Auch über die E-Mail-Adresse denn [^@]+ matched eine beliebig lange Zeichenkette mit allen Zeichen außer @; und somit ebenfalls Zeilenumbrüche usw.
Wieso man nun ausgerechnet bei so einem Standardanwendungsfall unbedingt das Rad neu erfinden will, insbesondere wenn man sich vorher nicht ausreichend mit der Materie bekannt gemacht hat ist mir ehrlich gesagt ein wenig schleierhaft...
Man kann (unter anderem) über $_POST['name'] mittels Zeilenumbruch weitere Header einfügen. Beispw. für CC/BCC usw. Auch über die E-Mail-Adresse denn [^@]+ matched eine beliebig lange Zeichenkette mit allen Zeichen außer @; und somit ebenfalls Zeilenumbrüche usw.
Wieso man nun ausgerechnet bei so einem Standardanwendungsfall unbedingt das Rad neu erfinden will, insbesondere wenn man sich vorher nicht ausreichend mit der Materie bekannt gemacht hat ist mir ehrlich gesagt ein wenig schleierhaft...
Danke für Deine schnelle Antwort. Dieses script lief seit Jahren. Ich hatte es empfohlen bekommen etwas abgeändert und somit das Rad nicht neu erfunden, da ich das auch nicht beabsichtigt habe. Allerdings war mir die header Problematik nicht bewußt.
Die auf Deinem Link empfohlenen Maßnahmen, um dieses Problem zu beheben setzen einen root Zugrif voraus. Ich suche nach einem sicheren php-Mailer.
Ist es richtig, dass das Unterbinden von Zeilenumbrüchen in Variablen eine wirksame Methode bei mailern gegen spam ist?
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
//error_reporting(E_ALL);
setlocale(LC_ALL, 'de_DE');
define("MAILTO", "info@blabla.de");
if (isset($_POST["form_submitted"]))
{
// übergebene Variablen ermitteln:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$text = $_POST['text'];
// Überprüfungen der Daten:
unset($errors);
if ($name == "") $errors[] = "Sie haben keinen Namen eingegeben!";
if ($name != "" and !preg_match("/^[[:print:]]{3,}$/", $name)) $errors[1] = "Fehler bei der Namenseingabe";
//if ($email == "") $errors[] = "Sie haben keine Email Adresse eingegeben !";
// if ($email != "" and !preg_match("/^[^@]+@.+.D{2,5}$/", $email)) $errors[1] = "Ihre e-Mail Adresse ist nicht richtig !";
if ($email != "" and !preg_match("/^ [w.!#%&*/=?^`{|}~+-]{1,64}@ [[:alnum:].-]{1,255} . [a-z]{2,6} $/xi", $email)) $errors[2] = "Ihre e-Mail Adresse ist nicht richtig !";
//if ($subject == "") $errors[] = "Sie haben keine Text eingegeben !";
if ($subject == "") $errors[3] = "Sie haben keine Betreff eingegeben!";
if ($subject != "" and !preg_match("/^[[:print:]]{3,}$/", $subject)) $errors[4] = "Fehler bei der Betreffeingabe";
//if ($text == "") $errors[] = "Sie haben keine Text eingegeben !";
if ($text == "") $errors[5] = "Sie haben keine Text eingegeben!";
if ($text != "" and !preg_match("/^[[:print:][:space:]]{10,}$/", $text)) $errors[6] = "Fehler bei der Texteingabe";
...
//prüft Mailhost (MX)
//nur unter Unixen, keine Umlautdomains (sonst Zeile streichen)
if(!getmxrr(substr(strstr($_POST['email'], '@'), 1), $mxhosts))
die("<ul class='fehler'><li>Konnte keine gültige Domain für " . $_POST['email'] . " finden!</li></ul><br>
<a class='email' href='javascript:history.back();'>zurück</a>");
...