我花了两天多的时间在这个问题上,包括这个社区。仍然无法弄清楚问题的原因是什么。
1)我的表单第一行定义:
<form id="main-contact-form" name="contact-form" method="post" action="/mail/sendemail.php">
所有输入元素都定义了"名称"参数。
2)我将发送电子邮件.php文件权限更改为755。
3)我的htaccess文件不包含重写引擎标志,如下所示:
IndexIgnore .htaccess .htpasswd */.??* *~ *# */HEADER* */README* */_vti*
DirectoryIndex index.html
AddHandler php5.5-fastcgi php
实际上 - 我从我的其他网站复制了这个htaccess文件,不同的电子邮件表单运行良好。
4)我尝试多次修改发送电子邮件.php。我排除了任何验证函数,如空、修剪等 - 尝试简单:$from = $_POST['email'] - no additional validation
- 仍然不起作用。
5) 发送电子邮件.php:
$name = @trim(stripslashes($_POST['name']));
$from = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$to = 'changed@changed.com';
$headers = 'MIME-Version: 1.0'. "'r'n".
'Content-type: text/plain; charset=iso-8859-1'."'r'n".
'From: '.$name."'r'n".
'Reply-To: '.$from."'r'n".
'Subject: '.$subject."'r'n".
'X-Mailer: PHP/'.phpversion();
mail($to, $subject, $message, $headers);
die;
6) 正在发送邮件,但没有发件人、主题和消息 - 这些值为空。
7)这是简单的一页网站,带有联系表格,只有这个php脚本。
在大多数文章中,我可以读到RewriteEngine通常负责此错误 - 但我使用绝对路径/mail/sendemail.php
并且我的htaccess文件中没有定义RewriteEngine标志。
更新。
8.在原始sendemail中.php脚本中有一个数组变量用于创建$headers - 但是 - 我的服务器日志中有一个信息,该数组(类型)不能用作邮件函数中的第4个参数。正如我上面已经提到的,我决定以不同的方式创建$headers。也许这个数组应该转换为可以接受为邮件函数中的第 4 个参数的东西?
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
尝试:
$headers = "MIME-Version: 1.0'n".
"Content-Type: text/plain; charset='"iso-8859-1'"'n".
"From: $name'n".
"Reply-To: $from'n".
"Subject: $subject'n";
最终有效的代码:
<?php
$name = @trim(stripslashes($_POST['name']));
$from = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$to = 'valid-address@valid-domain.com';
$headers = "MIME-Version: 1.0'n".
"Content-Type: text/plain; charset='"iso-8859-1'"'n".
"From: $name'n".
"Reply-To: $from'n".
"Subject: $subject'n".
"X-Mailer: PHP/".phpversion();
mail($to, $subject, $message, $headers);
echo
// Back to previous page
"<script>
alert('Dziękuje za przesłanie wiadomości. Postaram się odpowiedzieć możliwie szybko.');
window.history.go(-1);
</script>";
die;
?>
谢谢你的所有建议。