1

次のコードに少し問題があります。[送信] をクリックすると、「PHP 警告: mail() [function.mail]: "sendmail_from" が php.ini に設定されていないか、カスタム "From:" ヘッダーが C:** * .com**\mailにありません」と表示されます21 行目の .php"

これはjQueryです:

$(document).ready(function(){
$("#send").click(function(){


    var valid = '';
    var isr = ' requested.</h6>';
    var name = $("#name").val();
    var mail = $("#email").val();
    var messaggio = $("#message").val();

    if (name.length<1) {
        valid += '<h6>A valid name is'+isr;
    }
    if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
        valid += '<h6>A valid e-mail address is'+isr;
    }


    if (valid!='') {
        $("#re").fadeIn("slow");
        $("#re").html("<h6><b>Error:</b></h6>"+valid);
        $("#re").css("background-color","#ffc0c0");
    }

    else {
        var datastr ='name=' + name + '&mail=' + mail + '&messaggio=' + encodeURIComponent(messaggio);
        $("#re").css("display", "block");
        $("#re").css("background-color","#FFFFA0");
        $("#re").html("<h6>Sending..</h6>");
        $("#re").fadeIn("slow");
        setTimeout("send('"+datastr+"')",2000);
    }
    return false;
});
});

function send(datastr){
    $.ajax({    
        type: "POST",
        url: "mail.php",
        data: datastr,
        cache: false,
        success: function(html){
        $("#re").fadeIn("slow");
        $("#re").html(html);
        $("#re").css("background-color","#e1ffc0");
        setTimeout('$("#re").fadeOut("slow")',2000);
    }
    });
}

そして、PHP

<?php
$mail = $_POST['mail'];
$name = $_POST['name'];
$text = $_POST['messaggio'];
$ip = $_SERVER['REMOTE_ADDR'];

$to = "admin@****.com";

$message = "E-mail received from: ".$name.", ".$mail.".<br />";
$message .= "Messaggio: <br />".$text."<br /><br />";
$message .= "IP: ".$ip."<br />";
$headers = "From: $mail \n";
$headers .= "Reply-To: $mail \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n";

 if(mail($to, $message, $headers)){
    echo "<h6>Message sent.</h6>";
}

else{ 
    echo "<h6>Ops! We've got a problem! :(</h6>";
}
?>

上記の行は「if(mail($to, $message, $headers)){」ですが、エラーがわかりません。

別の Web サイト (別のドメインも) で同じコードを使用していますが、問題なく動作します。

4

4 に答える 4

1

\r\nヘッダーはnotで終了する必要があります\n

$headers = "From: $mail \r\n"; 
$headers .= "Reply-To: $mail \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \r\n";

また、コードにヘッダー インジェクションの脆弱性があります。メールヘッダーに入れるすべての投稿データを検証する必要があります。

于 2012-04-27T16:21:18.920 に答える
0

PHP.INI の SMTP 設定を確認しましたか?

これをコードまたは php.ini で設定します。

  <?php 
     ini_set("SMTP","smtp-server-address" ); 
     ini_set('sendmail_from', 'from-email-address'); 
   ?> 

また、25 以外のポートを介して送信している場合は、デフォルトをオーバーライドすることもできます。

   ini_set('smtp_port', '2525'); 
于 2012-04-27T16:16:28.430 に答える
0

あなたの分野からキャリッジリターンが来るかもしれないと思います。次のように $_POST でデータ入力をスクラブする必要があります。

$mail = trim($_POST['mail']);

DB に入力する場合、正規表現で mysql_real_escape_string などを使用することもできます。

また、コードの一貫性のために:

$headers = "From: ".$mail." \r\n";
$headers .= "Reply-To: ".$mail." \r\n";

また、正しいメール パラメータが欠落していると思います。メールのドキュメントによると、件名パラメーターがありません:

mail($to, $subject, $message, $headers);
于 2012-04-27T16:31:45.263 に答える
0

FROM ヘッダーを次のように置き換えてみてください。

$headers = "From: $name <$mail>\r\n";

lt/gt 括弧内に電子メール アドレスを指定します。

もう1つの考えは、 $_POST['mail'] 値が実際に渡されていることを確認することです。

于 2012-04-27T16:22:08.957 に答える