Hi!
Der Martin hat dir ja bereits einiges zu deinem Code geschrieben.
Dann will ich jetzt noch mal Anmerkungen zu anderen Teilen machen:
$from_name=$_POST['fromname'];
$from_mail=strtolower($_POST['frommail']);
$mail_subject=$_POST['mailsubject'];
$mail_text=$_POST['mailtext'];
$send=$_POST['s'];
Warum kopierst du diese Werte noch mal in neue Variablen?
Das ist völlig unnötig. Du kannst mit den $_POST-Variablen weiterarbeiten.
Warum wendest du strtolower() auf $_POST['frommail'] an?
Da ist doch bestimmt die Absendermailadresse drin enthalten, oder?
Emailadressen sind potentiell casesensitive. Auch wenn die Groß- und Kleinschreibung meist keine Rolle spielt, solltest du da besser nichts dran drehen...
elseif(!ereg("+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,6})$", $from_mail))
Ich würde davon abraten, die regulären Ausdrücke nach POSIX zu verwenden.
Arbeite besser mit den PCRE regulären Ausdrücken.
D.h.: Nutze nicht die ereg_-Funktionen, sondern verwende die preg_-Funktionen.
In deinem Fall preg_match() statt ereg().
Diese Funktionen arbeiten um einiges schneller.
if(strlen($mail_text)>1000) {
$mail_text=substr($mail_text,0,1000)."... (Text wurde gekürzt!)";
}
Was soll das denn?
Wenn die Mail mehr als 1000 Zeichen enthält, dann läßt du den Rest einfach weg? Warum tust du das?
Und dem User teilst du das ja nicht einmal mit. Welchen Sinn macht das?
1000 Zeichen sind ja nicht gerade viel...
$header.="X-Mailer: PHP-FormMailer\n";
Nun ja... Über den Sinn davon läßt sich streiten...
Wenn du schon mitteilen möchtest, wer die Mail verschickt hat, dann könntest du auch noch die PHP-Version einfügen...
$header.="X-Mailer: PHP/" . phpversion() . "\r\n";
Die Headerzeile ist außerdem falsch abgetrennt. Es sollte \r\n statt \n sein.
Nur wenn es mit \r\n Probleme geben sollte, solltest du das ändern.
Laut dem SMTP-RFC ist \r\n erforderlich und \n ist falsch.
Leider hatte ich in letzter Zeit mal Probleme mit \r\n, wenn ich Mails mit PHP verschickt habe und postfix als MTA zum Einsatz kam.
Ich wollte immer mal testen, woran das Problem genau liegt... Jedenfalls wurde da ab und zu eine unschöne Ersetzung von PHP oder postfix durchgeführt.
Aber egal: tut jetzt nicht zur Sache... Nutze \r\n!
$header.="Content-Type: text/plain";
Schön, daß du den Content-Type angibst, aber du solltest auch noch eine Charset-Angabe machen.
Wenn du Umlaute/Sonderzeichen in den Mails verwenden willst, sollte der verwendete Zeichensatz unbedingt genannt werden, z.B.:
$header .= 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-15' . "\r\n";
(Dabei aber nicht einfach irgendeinen Zeichensatz wählen, der dir gerade gefällt, sondern der wirklich verwendete!)
if(@mail($mail_to,$mail_subject,$mail_text,$header[ 1]))
Was soll denn das $header[ 1]?
Das Leerzeichen dort verstehe ich nicht und $header ist doch kein Array...
Was willst du damit bezwecken?
header ("location: http://www.jesus-christus-zentrum.de/web/Danke.html");
Hier sollte ein exit; folgen, damit eventuell nachfolgender Code nicht ausgeführt wird, falls ein Client der Umleitung nicht folgt.
echo "<p><a href="".$_SERVER['PHP_SELF']."?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
echo urlencode($mail_text)."">Zurück zum Formular</a></p>";
Sonderzeichen, die in HTML eine Bedeutung haben, müssen zwingend maskiert werden. Statt & mußt du also & schreiben.
Ich kenne den Rest deiner Seite ja nicht...
Aber was du dort mit dem Link veranstaltest, sieht ziemlich gewagt aus. Wieso hängst du den gesamten Mailtext an den URL und übergibst ihn an deine Seite?
Hast du dir eigentlich mal eine dieser Mails in deinem Mailclient angesehen?
Ich weiß nicht, ob du es bereits mal geschafft hast, mit deinem Script eine Mail zu verschicken. Aber wenn dem so ist, dann schau sie dir mal - samt aller Headerzeilen - in deinem Mailclient an.
Schöner Gruß,
rob