PHPMailer '$mail->From = $_POST['email'] 不工作

PHPMailer '$mail->From = $_POST['email'] not working

我在我的网站上设置了一个联系表格,人们可以用它给我发电子邮件。该表格允许他们留下他们的电子邮件,这样我就可以以某种方式回复他们。但是出于某种原因,无论留下什么电子邮件,系统似乎总是认为我是将电子邮件发送到我自己的电子邮件地址的人,我猜这是由于代码的 $mail->Username 行是我?虽然发件人应该设置这个,但是我直接在代码中输入发件人地址似乎也不行。

这是我在我的网站上用来提交表单本身的表单。

<form id="contact-form" name="contact-form" method="post" action="contact-form.php" enctype="application/x-www-form-urlencoded">

    <input type="text" placeholder="Name" name="name" required="true">
    <i class="fa fa-envelope"></i><input type="email" placeholder="Email" name="email" required="true">
    <input type="text" placeholder="Subject" name="subject" required="true">
    <textarea placeholder="Message" name="message" rows="7" required="true"></textarea>
    <button type="submit" name="submit" value="submit">Send</button>
    <button type="reset" value="reset">Reset</button>
</form>

提交表单时php执行的代码是这样的

<?php
require 'assets/PHPMailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->SMTPDebug = 3;                                             // Enable verbose debug output

$mail->isSMTP();                                                    // Set mailer to use SMTP
$mail->Host = 'smtp.live.com';                                      // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                                             // Enable SMTP authentication
$mail->Username = 'myemail@hotmail.co.uk';                      // SMTP username
$mail->Password = 'mypassword';                                  // SMTP password
$mail->SMTPSecure = 'tls';                                          // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                                  // TCP port to connect to

$mail->From = $_POST['email'];
$mail->addAddress('myemail@hotmail.co.uk', $_POST['name']);    // Add a recipient
$mail->addReplyTo('info@example.com', 'Information');

$mail->isHTML(true);                                                 // Set email format to HTML

$mail->Subject = $_POST['subject'];
$mail->Body    = $_POST['message'];
$mail->AltBody = $_POST['message'];

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
?>

非常感谢任何帮助,谢谢。

我认为您不必 "pretend" $mail->From = $_POST['email']; 有人给您发送了电子邮件,因为如您所见,它不会起作用。如果你试图从某人发送电子邮件给自己只是为了能够按下 "reply to" 按钮并写信给这个人使用:

$mail->AddReplyTo($_POST['email']);

电子邮件将从您的邮箱发送到您的邮箱,但您将回复用户发布的电子邮件。

有些系统只是不允许您使用不是您自己的发件人地址作为防伪措施 - 因为别搞错了,您试图做的是伪造他们的地址!它也可能 运行 给任何使用 SPF 的人带来问题,所以你真的不应该尝试这样做。

Gmail 将允许您设置特定的别名,或使用您自己的域。

回复可能是最实用的解决方案,或者只是在邮件正文中提供一个 mailto link。