【发布时间】:2016-07-20 05:46:03
【问题描述】:
当用户在我网站上的表单上输入他们的电子邮件时,我会收到一封包含他们信息的电子邮件。我希望能够回复该电子邮件并让他们的电子邮件自动填写“收件人:”,但我遇到了麻烦。我发现了这个问题并尝试了解决方案:reply-to address in php contact form 但它对我不起作用,我不知道为什么。
这是我的 PHP:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$to = 'amanda@myemail.com';
$headers = "BCC: clients@myemail.com\r\n";
$headers .= 'Reply-To: ' . $email . "\r\n";
$subject = '*** Quote Request';
$name = $_POST['name'];
$phone = $_POST['phone'];
$date = $_POST['date'];
$time = $_POST['time'];
$pickup = $_POST['pickup'];
$dropoff = $_POST['dropoff'];
$passengers = $_POST['passengers'];
$service = $_POST['service'];
$email = $_POST['email'];
$message = <<<EMAIL
Quote submission from: $name
Name: $name
Phone Number: $phone
Date: $date
Time: $time
Pickup Location: $pickup
Drop Off Location: $dropoff
Total Passengers: $passengers
Service needed: $service
Email: $email
EMAIL;
if($_POST) {
mail($to, $subject, $message, $headers);
}
header('Location: thankyou.html');
exit();
?>
这是我收到的错误消息,总结如下:
未定义变量:第 9 行 /contact-form-handler.php 中的电子邮件警告:无法修改标头信息 - 标头已由 /contact-form 中的(输出开始于 /contact-form-handler.php:9)发送-handler.php 第 44 行
问题在于变量$email,因为如果我输入一个回复并指定一个电子邮件,它就可以工作。我想可能是因为变量是在我在标题中调用它之后定义的,但是将它添加到底部不起作用。我是 PHP 新手,所以我不确定为什么这个变量不起作用。
我也试过了:
$headers = "BCC: clients@myemail.com\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
任何帮助将不胜感激!
【问题讨论】:
-
在底部添加它在哪里?通常,您不能在为变量赋值之前使用它。
-
之前已经说过很多次了 - 不要使用内部 PHP
mail函数,因为它只是像 sendmail 这样的 MTA 的包装器,它施加了许多限制并经常导致问题。而是通过成熟的解决方案使用 SMTP,例如PHPMailer(github.com/PHPMailer/PHPMailer) 或SwiftMailer(github.com/swiftmailer/swiftmailer)。 -
您是否有意在单个字符串上交换引号类型?
$headers .= 'Reply-To: ' . $email . "\r\n";同时使用单引号和双引号。对我来说,这看起来是非常糟糕的做法。