Subversion-Projekte lars-tiefland.php_share

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?
        // $Id: mail.php 24 2007-07-03 10:41:26Z tiefland $

        //Variablen initialisieren      
        $encoding=iconv_get_encoding();
        $headers=array();
        $email=(isset($_POST["email"]))?$_POST["email"]:"info@weban.de";
        $_from=(isset($_POST["_from"]))?$_POST["_from"]:$email;
        $_to=(isset($_POST["_to"]))?$_POST["_to"]:$email;
        $recipient=(isset($_POST["recipient"]))?$_POST["recipient"]:$email;
        $_subject=(isset($_POST["_subject"]))?$_POST["_subject"]:"";
        $subject=(isset($_POST["subject"]))?$_POST["subject"]:"";
        $_target=(isset($_POST["_target"]))?$_POST["_target"]:"";
        $redirect=(isset($_POST["redirect"]))?$_POST["redirect"]:"";
        $submit=false;
        $cc=false;
        $bcc=false;
        $sub=false;
        $ref=$_SERVER["HTTP_REFERER"];
        $start = strpos ($ref, "//");

        // Referrer überprüfen
        if ($start < 0) 
        {
                $start = 0;
        }
        else
        {
                $start = $start + 2;
        }
        $stop = strpos ($ref, "/", $start);

        // Variable $_POST auf "submit" als Array-Key überprüfen 
        // falls nicht gefunden ==> ENDE
        
/*      foreach ($_POST as $key => $value)
        {
                if (strtolower($key)=="submit")
                {
                        $submit=true;
                }
        }

        if (substr ($ref, $start, $stop-$start) != $_SERVER["SERVER_NAME"]||!$submit) */
        if (substr ($ref, $start, $stop-$start) != $_SERVER["SERVER_NAME"])
        {
                exit;
        }

        //Body zusammenbauen
        foreach(array_keys($_POST) as $elem)
        {
                if ($elem[0] == "_")
                {
                        unset($_POST[$elem]);
                }
                else
                {
                        if (is_array($_POST[$elem]))
                        {
                                $_POST[$elem] = implode($_POST[$elem],", ");
                        }
                        $_POST[$elem] = $elem.": ".$_POST[$elem];
                }
        }
        $body=iconv("UTF-8","ISO-8859-15",implode($_POST,"\n"));

        // TO Adresse ermitteln
        if (!$_to)
        {
                $_to = $recipient;
        }
        if (!$_subject) 
        {
                $_subject  = iconv("UTF-8","ISO-8859-15",$subject);
        }
        else
        {
                $_subject  = iconv("UTF-8","ISO-8859-15",$_subject);
        }

        // FROM Adresse ermitteln
        if (!$_from)
        {
                if ($email)
                {
                        $_from = $email;
                }
                else
                {
                        $_from = $_to;
                }
        }

        // Weiterleitungsziel ermitteln
        if (!$_target)
        {
                if ($redirect)
                {
                        $_target = $redirect;
                }
                else
                {
                        $_target = "danke.htm?ref=".urlencode($ref);
                }
        }
        else
        {
                $_target = dirname($ref)."/".$_target;
        }
        
        // Header überprüfen (muß leer sein)
        if(count($headers))
        {
                //Header wurde manipuliert!
                $keys=array("cc","cC","Cc","CC");
                foreach($keys as $key)
                {
                        if (isset($headers[$key]))
                        {
                                unset($headers[$key]);
                                $cc=true;
                        }
                        if (isset($headers["b".$key]))
                        {
                                unset($headers["b".$key]);
                                $bcc=true;
                        }
                        if (isset($headers["B".$key]))
                        {
                                unset($headers["B".$key]);
                                $bcc=true;
                        }
                }
        }
        
        // Verschiedene Variablen überprüfen, ob "TO: BCC: CC: oder FROM: Einträge vorkommen
        $ereg1 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $_to);
        $ereg2 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $body);
        $ereg3 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $_subject);
        
        // Eventuell vorhandenes "SUBJECT"-Feld im Header löschen
        foreach($headers as $header => $value)
        {
                if (strtolower($headers)=="subject")
                {
                        unset($headers[$header]);
                        $sub=true;
                }
        }
        
        //Body erweitern, falls manipulierte Werte gefunden wurden!
        $body.=($ereg1)?"To enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
        $body.=($ereg2)?"Body enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
        $body.=($ereg3)?"Subject enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
        $body.=($sub)?"Header enthielt zusätzliche Subject-Angabe!\n":"";
        $body.=($bcc)?"Header enthielt BCC-Angabe!\n":"";
        $body.=($cc)?"Header enthielt CC-Angabe!\n":"";
        
        //Prüfen, ob kein HTML in Nachricht vorkommt
        $no_html=($body==strip_tags($body));
        
        // Header-Array zusammenbauen
        $headers["From"]=$_from;
        $headers["Subject"]=$_subject;
        // PEAR-Klasse "Mail" einbinden und "mail"-Objekt erstellen
        require_once("Mail.php");
        $mail=Mail::factory("mail");
        
        // Prüfen, ob kein Fehler aufgetreten ist
        if(!PEAR::isError($mail))
        {
                // Wenn alles OK ist
                if(!$ereg1 && !$ereg2 && !$ereg3 && !$bcc && !$cc && !$sub && $no_html)
                {
                        //Mail verschicken
                        $mail->send($_to, $headers, $body);
                        $headers["Subject"]="Nachrichtenkopie auf $SERVER_NAME: ".$headers["Subject"];
                }
                else
                {
                        $headers["Subject"]="Nachrichtenkopie auf $SERVER_NAME: ".$headers["Subject"]." - Spam-Nachricht";
                }
                // Nachricht erweitern
                $body=implode("\n",$headers)."\n$_to\n$body";
                
                // Nachrichtenkopie verschicken
                $mail->send("tiefland@weban.de", $headers, $body);
                $mail->send("niewerth@weban.de", $headers, $body);
        }
        
        // Auf Danke-Seite weiterleiten
        header("Location: $_target");
?>