我在使用联系表单时遇到PHP错误,该表单工作正常,直到客户说他们自一周以来没有收到电子邮件。正如一位朋友帮助我使用后端,并且他现在无法提问,我想问一下你是否可以给我一个暗示我需要解决的问题。
错误:
`[Wed Feb 17 16:43:44 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php中的头文件第29行的/contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html
[Wed Feb 17 16:43:44 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html
[Wed Feb 17 16:45:18 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的标题第29行的contact-form-handler.php,引用者:http://www.wscgmbh.de/contact.html
[Wed Feb 17 16:45:18 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html
[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的名称第12行的contact-form-handler.php
[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的电子邮件第13行的contact-form-handler.php
[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的消息第14行的contact-form-handler.php
[Thu Feb 18 09:40:15 2016] [warn] [client 213.23.122.15] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的标题第29行的contact-form-handler.php,引用者:http://www.wscgmbh.de/contact.html
[Thu Feb 18 09:40:15 2016] [warn] [client 213.23.122.15] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html`
这是表单处理程序的代码,它一直在工作,但突然间没有
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<?php
$errors = '';
$myemail = 'service@wscgmbh.de';
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['message']))
{
$errors .= "\n Error: all fields are required";
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['message'];
if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z] {2,3})$/i",
$email_address))
{
$errors .= "\n Error: Invalid email address";
}
if( empty($errors))
{
$to = $myemail;
$email_subject = "Sie haben eine neue Nachricht von: $name";
$email_body = "Sie haben eine neue Nachricht erhalten, hier sind die Details: \n\nName: $name \nEmail: $email_address \nNachricht: \n$message";
$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";
mail($to,$email_subject,$email_body,implode("\r\n",$headers));
//redirect to the 'thank you' page
echo '<script>
alert("Danke für Ihre Nachricht. Wir werden uns bald bei melden!");
window.location = "http://www.wscgmbh.de"
</script>';
}
?>
我不是专家和PHP,所以我真的希望有人可以帮助我! 非常感谢你提前!!!
答案 0 :(得分:2)
这里的问题是你缺少(并将标题声明为数组):
(另请参阅下面有关Antworten Sie:
)的修改。
$headers = array();
放在上面:
$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";
您还需要删除点(连接)和. "\r\n"
。
implode("\r\n",$headers)
会照顾它。
$headers = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Antworten Sie: {$email_address}";
根据邮件手册的例子:
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: Sender Name <sender@domain.com>";
$headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($to, $subject, $email, implode("\r\n", $headers));
另外,From:
需要一封电子邮件,而不是一个名字,因此邮件可能会因此而成为垃圾邮件。
参考:
如果你想使用圆点(连接)和\r\n
,那么你需要使用以下代码,并按照手册中的例子进行操作:
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
// Mail it
mail($to, $subject, $message, $headers);
修改强>
我注意到Antworten Sie:
这个词在德语中似乎意味着“回复”(当我访问Google翻译时)。
如果是From:
或Reply-to
,那么您不能将其用作邮件标题的一部分,而是按照手册中的Reply-To:
说明:< / p>
Reply-To: webmaster@example.com
因此,您的代码需要读作:
$headers = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Reply-To: {$email_address}";
这也是标题失败的一个因素。
更改mail($to,$email_subject,$email_body,implode("\r\n",$headers));
为:
if(mail($to,$email_subject,$email_body,implode("\r\n",$headers))) {
echo "Mail sent.";
} else {
echo "Error.";
}
如果您看到“已发送邮件”,则mail()
已完成其工作。也可以查看您的垃圾邮件。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
考虑使用PHPMailer或Swiftmailer:
是PHP的mail()
函数的替代品。