【问题标题】:Reply-to email in PHP errorPHP错误中的回复电子邮件
【发布时间】: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"; 同时使用单引号和双引号。对我来说,这看起来是非常糟糕的做法。

标签: php email


【解决方案1】:

在定义变量之前使用它!

将此块移动到脚本的顶部:

$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'];

这样:

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

$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'];

$to = 'amanda@myemail.com';
$headers = "BCC: clients@myemail.com\r\n";  
$headers .= 'Reply-To: ' . $email . "\r\n";

$subject = '*** Quote Request';


$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();

?>

【讨论】:

  • 谢谢凯文罗布!我不敢相信它是如此简单,我觉得很傻。但我真的很感谢你弄清楚,这对我有用。
【解决方案2】:

您的联系表单似乎没有收到$_POST['email'];(回复:“未定义变量:电子邮件”)

检查您的邮件输入字段的名称...

【讨论】:

  • 那将是一个未定义的 index 通知,而不是未定义的 variable。这行$headers .= 'Reply-To: ' . $email . "\r\n"; 抛出它,因为它之前没有定义。
猜你喜欢
  • 2012-02-05
  • 2014-03-19
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多