2012-04-27 118 views
1

我有一个小问题,下面的代码。当我点击“发送”它说:“PHP警告:邮件()[函数。邮件]:”sendmail_from“未在php.ini中设置或自定义”发件人:“头文件丢失在C:** * .com ** \上线21" mail.phpPHP邮件功能不工作(jQuery/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._-][email protected][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 = "[email protected]****.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>"; 
} 
?> 

所提及的行是“如果(电子邮件($到,$消息,$标题)){“但我不明白错误。

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

+0

您不应该生成自己的mime消息。使用PHPMailer或Swiftmailer(谷歌为他们),让他们处理的细节。正确地获取电子邮件标题非常棘手,而且您没有正确生成它们。 – 2012-04-27 16:14:47

+0

'ini_set(“sendmail_from”,“[email protected]”);'工作? – 2012-04-27 16:15:37

+1

此外,尝试使用'\ r \ n'而不是'\ n' - 它应该是一个CR和一个用于分隔头的LF – Basic 2012-04-27 16:15:37

回答

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'); 
+0

这就是问题所在。谢谢大家的努力。 – TyTiKi 2012-05-02 14:48:23

1

页眉需要用\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"; 

也有一个头注入漏洞在你的代码。您应该验证您放入电子邮件标题的所有发布数据。

0

您可以尝试与更换您从标题:

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

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

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

0

我想你可能有回车来自你的领域。你需要擦洗你的数据输入在$ _ POST,如:

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

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

而且在你的代码consistantcy:

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

而且我觉得你错过了正确的邮件参数。根据邮件文档,您缺少一个主题参数:

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