Sebastian: PHP Turbomailer ;-) (für Anfänger)

Hallo Leute,

http://www.zabdesign.de/temp/turbomailer.php

hier findet ihr einen Formmailer, der eine E-mail an einen beliebigen Empfänger sendet.

Ich habe dabei 2 Probleme:

Einmal, wenn ich Anführungszeichen im Fließtext verwende, werden vor
diese backslashes gesetzt, wenn der Text versendet wird.
Wie kann ich das verhindern?

Und des weiteren, möchte ich die Zeilenumbrüche, die ich im Formular-Feld per Hand eingebe auch in die Nachricht übernehmen.
Gibt es da eine Möglichkeit?

Einen freundlichen Gruß sendet
Sebastian

Hier der Quellcode:

<?php

function check_email($from,$to) {
  // RegEx begin
  $nonascii      = "\x80-\xff"; # Non-ASCII-Chars are not allowed

$nqtext        = "[^\\$nonascii\015\012"]";
  $qchar         = "\\[^$nonascii]";

$protocol      = '(?:mailto:)';

$normuser      = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
  $quotedstring  = ""(?:$nqtext|$qchar)+"";
  $user_part     = "(?:$normuser|$quotedstring)";

$dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
  $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
  $dom_tldpart   = '[a-zA-Z]{2,5}';
  $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";

$regex         = "$protocol?$user_part@$domain_part";
  // RegEx end

return preg_match("/^$regex$/",$from);
   return preg_match("/^$regex$/",$to);
}

//Referer gesetzt?
    if (isset($HTTP_REFERER)) {
        $mailtext.= $_POST["text"];
    }
    else {
        $mailtext.= ".\n";
    }

//Vorsichtshalber das Array vor dem Durchlaufen zurücksetzen (interner Zeiger auf Position [0])
    reset ($_POST);

while (list ($varname, $varvalue) = each ($_POST)) {

if(empty($_POST["to"])) {
            echo "Bitte einen Empfänger angeben!";
            $fehler = 1;
            exit();
            }
             if(empty($_POST["from"])) {
            echo "Bitte einen Absender angeben!";
            $fehler = 1;
            exit();
            }
            if(check_email($from)==false or check_email($to)==false) {
            echo "Bitte eine gültige E-Mail-Adresse angeben!";
            $fehler = 1;
            exit();
            }
            if(empty($_POST["text"])) {
            echo "Es fehlt die Nachricht!";
            $fehler = 1;
            exit();
            }
     }
$header .= "From:" .$_POST["from"]."\n";
$header .= "Reply-To:" .$_POST["to"]."\n";
$header .= "X-Mailer: PHP/" .phpversion(). "\n";
$header .= "Content-Type: text/plain; charset="iso-8859-1"\n";
$header .= "Content-Transfer-Encoding: 8bit\n";

mail($_POST["to"], $_POST["subject"], $mailtext, $header);

if (check_email($to)==true and check_email($from)==true and isset($fehler)==false){

echo "Folgende Daten wurden gesendet!\n<br>\n---------------------------------------------------------------------------------------\n<br>\n<br>"
        . "<b>Absender: </b>" .$_POST["from"]."<br>"
        ."<b>Empfänger: </b>" .$_POST["to"]."<br><br>"
        ."<b>Ihre Nachricht: </b>" .$_POST["text"];
 }
  ?>

  1. Hallo Sebastian,

    Einmal, wenn ich Anführungszeichen im Fließtext verwende, werden vor
    diese backslashes gesetzt, wenn der Text versendet wird.
    Wie kann ich das verhindern?

    mit http://www.php.net/stripslashes - das liegt übrigends an magic_quotes_gpc=on

    Und des weiteren, möchte ich die Zeilenumbrüche, die ich im Formular-Feld per Hand eingebe auch in die Nachricht übernehmen.
    Gibt es da eine Möglichkeit?

    werden sie afaik doch... *rätsel*

    mail($_POST["to"], $_POST["subject"], $mailtext, $header);

    damit kann mit deinem Formmailer eine Mail an jeden beliebigen Empfänger geschickt werden (Spam)

    ."<b>Ihre Nachricht: </b>" .$_POST["text"];

    sind hier vielleicht keine Zeilenumbrüche drin? wenn du <pre></pre> um den Text machst, sollte welchen dargestellt werden.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Tobias,

      vielen Dank für die Tipps!
      Ich werde mal schauen, was ich damit anfangen kann!

      gruß
      ZAB

    2. Und noch was:

      ich werde die Datei noch mit einem Passwort schützen
      und dieses nur ein paar Freunden mitteilen, wenn der Mailer etwas ausgereifter ist.

      Gruß
      ZAB