PHP 邮件函数不起作用 (jQuery/php)


PHP Mail function not working (jQuery/php)

我对以下代码有一点问题。当我单击"发送"时,它说"PHP 警告:mail() [function.mail]:"sendmail_from"未在 php 中设置.ini或者在第 21 行的 C:***.com**''mail.php 中缺少自定义"From:"标头"

这是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
$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)){",但我不明白这个错误。

我在另一个网站(也是另一个域)上使用相同的代码,并且运行没有问题。

标头需要以 'r'n 结尾,而不是 '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";

此外,代码中还存在标头注入漏洞。您应该验证放入电子邮件标头的所有帖子数据。

您是否检查过 PHP 中的 SMTP 设置。.INI?

在你的代码或你的php中设置这个.ini:

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

如果您通过与 25 不同的端口发送,您还可以覆盖默认值:

   ini_set('smtp_port', '2525'); 

您可以尝试将 FROM 标头替换为:

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

在 LT/GT 括号内指定电子邮件地址。

另一个想法是确保 $_POST['mail'] 值确实被传递了。

我想你可能会有一个来自你的领域的回车。您需要清理 $_POST 中的数据输入,例如:

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

如果输入数据库,您可能还想在正则表达式中使用mysql_real_escape_string或类似的东西。

同样为了代码的一致性:

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

另外,我认为您缺少正确的邮件参数。根据邮件文档,您缺少一个主题参数:

mail($to, $subject, $message, $headers);