が正常に送信された後に電子メールを送信する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
すべてが機能するので、問題はそこになければなりません。