0

所以,这是我 sendemail.php 中代码的一部分,它运行良好:

$email = $_POST["email"];

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: <webmaster@example.com'>' . "\r\n";

当尝试编辑 From: 到从我的表单收到的电子邮件时,脚本突然不起作用。你可以帮帮我吗?

我试过这个:

$email = $_POST["email"];

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: <"$email">' . "\r\n";
4

2 回答 2

1

问题是这一行:

$headers .= 'From: <"$email">' . "\r\n";

它应该是:

$headers .= 'From: <"' . $email . '">' . "\r\n";

因为变量的内容是用单引号括起来的,所以$email变成了一个文字“$email”,这至少会导致接收电子邮件出现问题,因为垃圾邮件过滤器通常会在看到这个时引发一个危险信号。

于 2013-11-11T00:49:54.153 回答
0

处理高度格式化内容中的变量的另一种方法是使用sprintf

所以约翰康德给出的例子是这样的:

$headers .= 'From: <"' . $email . '">' . "\r\n";

但是使用sprintf它看起来像这样:

$headers .= sprintf('From: <"%s">' . "\r\n", $email);

好处是您不必担心平衡报价。而且由于变量始终位于行尾,因此在我看来,它使检查调试变得更容易一些。

编辑:另外,由于这种格式更好但仍然没有发送(根据原始海报的评论),请尝试以下变体。没有引号:

$headers .= sprintf('From: <%s>' . "\r\n", $email);

没有<>

$headers .= sprintf('From: %s' . "\r\n", $email);
于 2013-11-11T01:00:04.357 回答