【问题标题】:PHPMailer '$mail->From = $_POST['email'] not workingPHPMailer '$mail->From = $_POST['email'] 不工作
【发布时间】:2023-03-19 10:37:01
【问题描述】:

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

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

<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';
}
?>

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: php forms phpmailer


    【解决方案1】:

    某些系统只是不允许您使用与您自己不同的发件人地址作为防伪措施 - 因为不要搞错,您要做的就是伪造他们的地址!任何使用 SPF 的人也可能会遇到问题,因此您真的不应该尝试这样做。

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

    reply-to 可能是最实用的解决方案,或者只是在邮件正文中提供一个 mailto 链接。

    【讨论】:

    • 啊,好吧,我能理解他们为什么不希望我那样做。如果我愿意,我可以使用其他人的电子邮件进行犯罪等。我在正文中包含了发件人的电子邮件,所以我知道该回复谁,谢谢你的帮助。
    【解决方案2】:

    我认为您不必“假装”$mail-&gt;From = $_POST['email']; 有人向您发送了电子邮件,因为您可以看到它不起作用。如果您尝试从某人向自己发送电子邮件只是为了能够按下“回复”按钮并写信给此人,请使用:

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

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

    【讨论】:

    • 我正在寻找一种方法来设置电子邮件的实际发件人,但这似乎不起作用,我正在这样做,因为通过 godaddy 电子邮件转发我有一个发件人的自动回复消息,但是我只是一直收到自动回复而不是发件人。我想我只需要将电子邮件附加到正文中,这样我就知道要回复谁,从 godaddy 中删除自动回复并自己将其构建到 PHP 中。
    • 你可以正常回复这是AddReplyTo的选项。如果你设置了这个,回复将被发送到这个地址而不是你的。
    • 我将AddReplyTo 行更改为$mail-&gt;addReplyTo($_POST['email']);,但它仍会将回复发送到我自己的电子邮件,而不是帖子数据“电子邮件”的值。
    • 并且在标题中地址设置正确?如果是这样,问题出在用于发送自动回复的软件中 - 它应该使用来自Reply-To的地址
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多