0

が正常に送信された後に電子メールを送信するAjaxフォームがあります。それは私のローカル環境では問題なく機能します。このページを公開する予定なので、主にメールヘッダーの挿入を防ぐために、フォームからのデータに何らかの形式のサニテーションを追加する必要があります。

そのために、私は次の関数を使用します。

// see http://www.erich-kachel.de/?p=26 for details
function QB_SECURE_MAIL_PARAM($param_ = '', $level_ = 2) { 

    unset($filtered); 
    /* replace until done */ 
    while ($param_ != $filtered || !isset($filtered)) { 
        if (isset($filtered)) { 
            $param_ = $filtered; 
        } 
        $filtered = preg_replace( 
            "/(Content-Transfer-Encoding:|MIME-Version:|content-type:|" . 
            "Subject:|to:|cc:|bcc:|from:|reply-to:)/ims", "", $param_); 
    } 
    unset($filtered); 

    if ($level_ >= 2) { 
        /* replace until done */ 
        while ($param_ != $filtered || !isset($filtered)) { 
            if (isset($filtered)) { 
                $param_ = $filtered; 
            }         
            $filtered = preg_replace( 
                "/(%0A|\\\\r|%0D|\\\\n|%00|\\\\0|%09|\\\\t|%01|%02|%03|%04|%05|" .
                "%06|%07|%08|%09|%0B|%0C|%0E|%0F|%10|%11|%12|%13)/ims", "", $param_);
        } 
    } 
    return $param_; 
} 

例として、次のスニペットを示します。

$headers = "From: " . QB_SECURE_MAIL_PARAM($from); 

mail(QB_SECURE_MAIL_PARAM($recipient), 
     QB_SECURE_MAIL_PARAM($subject), 
     QB_SECURE_MAIL_PARAM($message, 1), 
     $headers); 

私のコードでは、次のようになります。

$email = QB_SECURE_MAIL_PARAM( $email );
$name = QB_SECURE_MAIL_PARAM( $name );
$message = QB_SECURE_MAIL_PARAM( $message , 1 );

$header  = "MIME-Version: 1.0" . "\r\n";
$header .= "Content-type: text/html; charset=utf-8" . "\r\n";
$header .= "Content-Transfer-Encoding: quoted-printable" . "\r\n";
$header .= "Reply-To:" . $email . "\r\n";
$header .= "From: myForm <noreply@form.net>" . "\r\n";
mail ( "my.mail@mail.com" , "You have a message from " .  $name . " waiting for you" , $message , $header ); 

メールは送信されますが、AJAXではerrorイベントがトリガーされます。なんで?

私は繰り返します:機能がなければQB_SECURE_MAIL_PARAMすべてが機能するので、問題はそこになければなりません。

4

1 に答える 1

0

Mime-Version に問題がある可能性があります

于 2013-02-18T05:20:08.620 に答える