Subversion-Projekte lars-tiefland.php_share

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?
    // $Id: mail.php 28 2007-09-28 12:28:21Z tiefland $

    //Variablen initialisieren
    $headers = array();
    $email = ( isset($_POST["email"]) ) ? $_POST["email"] : "info@weban.de";

    // Existiert ein Email Schutz?
    if ( eregi("[a-z0-9]{32}", $_POST["_to"]) )
    {
        // Ja, dann ueberpruefe ob Konfiguration existiert
        if ( file_exists('emailconfig.default.inc.php') )
        {
            include ( 'emailconfig.default.inc.php' );
        }
        // Existiert auch diese Adresse
        if ( $GLOBALS['email_config'][$_POST["_from"]] )
        {

            $_from = $GLOBALS['email_config'][$_POST["_from"]];
            $_to = $GLOBALS['email_config'][$_POST["_to"]];
            $recipient = $GLOBALS['email_config'][$_POST["recipient"]];

            $_subject = "Anfrage ueber: " . $GLOBALS['email_config'][$_POST["_subject"]];
            $subject = "Anfrage ueber: " . $GLOBALS['email_config'][$_POST["_subject"]];

        }
        else
        {
            die( "Sie haben einen Fehlehaften Code uebergeben.<br>" );
        }

    }
    else
    {
        $_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, "//" );

    $linkInfo = readlink( $_SERVER["SCRIPT_FILENAME"] );
    $infoString = "PHP_SELF: " . $_SERVER["PHP_SELF"] . "\n";
    $infoString .= "SCRIPT_NAME: " . $_SERVER["SCRIPT_NAME"] . "\n";
    $infoString .= "REQUEST_URI: " . $_SERVER["REQUEST_URI"] . "\n";
    $infoString .= "SCRIPT_FILENAME: " . $_SERVER["SCRIPT_FILENAME"] . "\n";
    $infoString .= "HTTP_REFERER: " . $_SERVER["HTTP_REFERER"] . "\n";
    $infoString .= "REMOTE_ADDR: " . $_SERVER["REMOTE_ADDR"] . "\n";
    $infoString .= "SYM_LINK_INFO: " . $linkInfo . "\n";

    $infoString = "\n\n=============================================\n" . $infoString .
        "=============================================\n";

    // 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 = implode( $_POST, "\n" );

    // TO Adresse ermitteln
    if ( !$_to )
    {
        $_to = $recipient;
    }
    if ( !$_subject )
    {
        $_subject = $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 (muessen 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 zusaetzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n" :
        "";
    $body .= ( $ereg2 ) ?
        "Body enthielt zusaetzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n" :
        "";
    $body .= ( $ereg3 ) ?
        "Subject enthielt zusaetzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n" :
        "";
    $body .= ( $sub ) ? "Header enthielt zusaetzliche 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 );
        }

        // Nachricht erweitern
        $body = implode( "\n", $headers ) . "\n$_to\n$body";

        // Nachrichtenkopie verschicken
        if ( !$ereg1 && !$ereg2 && !$ereg3 && !$bcc && !$cc && !$sub && $no_html )
        {
            $headers["Subject"] = "Nachrichtenkopie auf $SERVER_NAME: " . $headers["Subject"];
        }
        else
        {
            $headers["Subject"] = "Nachrichtenkopie auf $SERVER_NAME: " . $headers["Subject"] .
                " - Spam-Nachricht";
        }

        /*              $mail->send("markus@weban.de", $headers, $body.$infoString);
        $mail->send("niewerth@weban.de", $headers, $body.$infoString);
        $mail->send("tiefland@weban.de", $headers, $body.$infoString);*/
    }

    // Auf Danke-Seite weiterleiten
    header( "Location: $_target" );
?>