PHPMailer' $ mail->来自= $ _POST ['电子邮件']不工作

时间:2015-01-15 17:35:06

标签: php forms phpmailer

我已经在我的网站上设置了一个联系表格,人们可以用它给我发电子邮件。表单允许他们留下他们的电子邮件,所以我可以以某种方式回到他们。但是出于某种原因,无论留下什么电子邮件,系统似乎总是认为我是将电子邮件发送到我自己的电子邮件地址的人,我猜这是因为$ mail->用户名代码行是我?虽然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';
}
?>

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

有些系统只是不允许你使用除了你自己以外的地址作为反伪造措施 - 因为不要搞错,你要做的就是伪造他们的地址!任何使用SPF的人都可能会遇到问题,所以你真的不应该尝试这样做。

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

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