6 mar 2008

Wysyłanie maila w PHP oraz sprawdzenie treści

Funkcja testująca zawartość pól formularza:

function test_content_mail($value) {

    if(eregi('Content-Transfer', $value) || eregi('Content-Type', $value))  
        $value = 'error';

    if(eregi('Subject:', $value) || eregi('bcc:', $value))  
        $value = 'error';

    if(eregi('MIME-Version', $value))
        $value = 'error';       
       
    return $value;
}

Funkcja generująca treść maila: (pola do wysłąnia zaczynaja się od prefiksu 'f_')

    function mail_tresc($data) {

         foreach($data as $key => $value) {
             if(preg_match("/^f_/", $key)) {
                 $error = test_content_mail($value);
                 if($error=='error') {
                     $content='error';
                     break;
                 }
                 $content .= substr($key, 2) . ': ' . $value . "";
             }
         }

         return $content;
    }

    $content = mail_tresc($_REQUEST);
    if($content=='error') {
        echo 'Error... Wprowadzono niedozowlone tresci.';
        exit();
    }

    $to = <a href="mailto:'kody@kody.wig.pl'">'kody@kody.wig.pl'</a>;
    $from = <a href="mailto:'test@kody.wig.pl'">'test@kody.wig.pl'</a>;

    $subject = 'Temat';

Dodatkowe nagłówki maila:

    $headers = "From: $from\r";
    $headers .= "Subject: Temat\r";
    $headers .= "MIME-Version: 1.0\r";      
    $headers .= "Content-Type: text/plain; charset=ISO-8859-2; format=flowed\r";
    $headers .= "Content-Transfer-Encoding: 7bit";
    $body     = 'Treść'."".$content."\r";

    $mail_status = mail($to, $subject, $body, $headers);</span><span class="mce_ws_kod">    $url = $_SERVER['HTTP_REFERER'];
    $pos = strpos($url, '&wyslano');</span><span class="mce_ws_kod">Zabezpiszenie przed doklejaniem w nieskończoność fo referera zmiennej 'wyslano'

    if($pos) {
        $url = substr($url, 0, strpos($url, '&wyslano'));
    }

    header("Location: ".$url.'&wyslano=1');
    exit();