收到电子邮件时,PHP发件人地址错误

收到电子邮件时,PHP发件人地址错误,php,email,smtp,gmail,phpmailer,Php,Email,Smtp,Gmail,Phpmailer,我有一个问题,当我收到从本地主机网站发送的电子邮件时,发件人部分的电子邮件地址错误($mail->SetFrom($email,$name))我作为发件人获得自己的电子邮件地址,而不是我网站文本框中输入的地址 我到处寻找答案,遗憾的是什么都没用。我尝试过使用Chrome帐户设置,并将不太安全的应用设置为打开。那没用 我尝试了多种方法来设置电子邮件和姓名。需要帮助 <?php $dir = __DIR__; require_once("$dir/../PHPMailer-master/PH

我有一个问题,当我收到从本地主机网站发送的电子邮件时,发件人部分的电子邮件地址错误($mail->SetFrom($email,$name))我作为发件人获得自己的电子邮件地址,而不是我网站文本框中输入的地址

我到处寻找答案,遗憾的是什么都没用。我尝试过使用Chrome帐户设置,并将不太安全的应用设置为打开。那没用

我尝试了多种方法来设置电子邮件和姓名。需要帮助

<?php 
$dir = __DIR__;
require_once("$dir/../PHPMailer-master/PHPMailerAutoload.php");
extract($_POST, EXTR_PREFIX_ALL, "P");

$name = $_POST['postName'];
$email = $_POST['postEmail'];
$subject = $_POST['postSubject'];
$message = $_POST['postMessage'];
$file = $_POST['postFile'];

echo "Name: ".$_POST['postName'];
echo "\n";
echo "Email: ".$_POST['postEmail'];
echo "\n";
echo "Subject: ".$_POST['postSubject'];
echo "\n";
echo "Message: ".$_POST['postMessage'];
echo "\n";
echo "File: ".$_POST['postFile'];

$mail = new PHPMailer;
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "mail.gmail.com"; // SMTP server
//$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "tls";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 587;                   // set the SMTP port for the GMAIL server
$mail->Username   = "xxxx@gmail.com";  // GMAIL username
$mail->Password   = "xxxx";            // GMAIL password
$mail->SetFrom($email, $name);
$mail->AddReplyTo($email, $name);
$mail->addAddress("xxxx@gmail.com", "name");
$mail->AddAttachment("$file");
$mail->Subject   = "$subject";
$mail->Body      = "$message";

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

这是我设置的警报,显示发送到my PHP脚本的所有POST参数。所有POST变量都在那里唯一的问题是SetFrom($email,$name)


Gmail不允许您设置任意发件人地址,尽管您可以定义预设别名

然而,无论如何,你不应该尝试这样做。将用户提供的值放入发件人地址是一个非常糟糕的主意,因为您的邮件将无法通过SPF检查,因为它是伪造的。使用
addReplyTo()
方法将您自己的地址放在发件人地址(以及收件人地址)中,并将提交人的地址放在回复标题中。您可以在PHPMailer提供的联系人表单示例中看到这一点:

//Use a fixed address in your own domain as the from address
//**DO NOT** use the submitter's address here as it will be forgery
//and will cause your messages to fail SPF checks
$mail->setFrom('from@example.com', 'First Last');
//Send the message to yourself, or whoever should receive contact for submissions
$mail->addAddress('whoto@example.com', 'John Doe');
//Put the submitter's address in a reply-to header
//This will fail if the address provided is invalid,
//in which case we should ignore the whole request
if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
...

afair gmail从现场忽略,始终使用真实用户代替,以禁止伪造感谢您的解释!这真的很有帮助。但是如果我有一个客户通过联系方式给我发电子邮件呢?我将不得不在发件人标题中使用他/她的电子邮件地址,对吗?不。那将是伪造的。你应该把他们的地址写在回信头上。查看PHPMailer提供的联系人表单示例,了解如何正确执行该操作。