PHP联系表返回错误消息

问题描述:

我有这些在2个不同的服务器上完全相同的PHP联系表格代码。 1按预期工作,但另一个正在返回错误消息而不是成功消息。另外,电子邮件不会发送给我。PHP联系表返回错误消息

Contact.php代码如下:

<?php 
ob_start(); 
if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $query = $_POST['message']; 
    $email_from = $name.'<'.$email.'>'; 

$to="[email protected]"; 
$subject="Enquiry"; 
// $headers = 'MIME-Version: 1.0' . "\r\n"; 
//$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= "From: ".$email_from."\r\n"; 
$message="  
Name: 
$name  
Email: 
$email  
Message: 
$query 
"; 
    if(mail($to,$subject,$message,$headers)) 
     header("Location: http://www.website.com/contact.php?msg=Successful Submission! Thank you for contacting us."); 
    else 
     header("Location: http://www.website.com/contact.php?msg=Error Sending Email!"); 
} 
?> 

我想知道,如果它是权限/服务器的问题? 任何帮助将不胜感激!谢谢!

您的代码构造是正确的,并且返回值(这是您的自定义错误)可能是正确的“if” mail函数失败。

很多时候我们发现php mail()函数不起作用。在某些情况下,即使函数返回true也不会发送电子邮件。以下是您可以在调试时检查的要点:

  1. 首先检查sendmail_path变量设置是否正确。您可以通过在页面中回显phpinfo()来查看它。典型值为 /usr/sbin/sendmail -t -i
  2. 如果要在 函数的第4个参数中发送额外的标头,请尝试删除它并发送。在邮件功能中, 有一个非常常见的错误标题。
  3. 检查您的服务器是否安装了垃圾邮件过滤器,该邮件过滤器阻止了您的电子邮件,该邮件过滤器为 。

如果您有访问权限,请检查您的邮件日志文件,以查看邮件服务器是否阻止了电子邮件或尚未到达服务器。如果日志中没有输入您的电子邮件,这意味着您的php代码或php配置有问题。如果它在日志中,您可以看到它未交付的原因。 邮件日志文件的典型路径是/ var/log/maillog

+0

sendmail_path显示为“无值”...是主要问题吗? – Melvy

+0

@ Melvallouse'可以找到sendmail程序,通常是/ usr/sbin/sendmail或/ usr/lib/sendmail。 configure会为你找到一个真正的尝试,并设置一个默认值,但如果失败,你可以在这里设置它。http://php.net/manual/en/mail.configuration.php。如果未设置,您的邮件永远不会发送 –

+0

感谢您隔离问题。我不知道该从哪里开始设置。 = 0 sendmail_path =首先没有值是什么意思?天哪。再次感谢您回答我的问题! – Melvy