使用phpmailer发送电子邮件失败

时间:2019-06-22 09:54:49

标签: php email phpmailer

我无法使用PHPMailer用PHP发送电子邮件,也不知道我的代码的哪一部分是错误的。我的代码如下:

<?php
$msg = "";

if (isset($_POST['submit'])) {
  require 'vendor/autoload.php';

  function sendemail($to, $from, $fromName, $body) {
    $mail = new PHPMailer\PHPMailer\PHPMailer();
    $mail->setFrom($from, $fromName);
    $mail->addAddress($to);
    $mail->Subject = 'Feedback';
    $mail->Body = $body;
    $mail->isHTML(false);

    return $mail->send();
  }

  $name = $_POST['name'];
  $email = $_POST['email'];
  $body = $_POST['body'];

  if (sendemail('draysondw@gmail.com', $email, $name, $body)) {
    $msg = 'Email sent!';
  }
  else {
    $msg = 'Email Failed!';
  }
}  ?>
<html>
<head>
  <meta charset="utf-8">
  <title>Feedback Form</title>
</head>
<body>
  <form method="post" action="index.php">
    Name: <input type="text" name="name" required><br>
    Email: <input type="text" name="email" required><br>
    Message: <textarea name="body"></textarea><br>
    <input type="submit" name="submit" value="Send Feedback">
  </form>
  <br>
  <?php echo $msg; ?>
</body>
</html>

能否请您帮我弄清楚我在改正发送电子邮件时做错了什么?

1 个答案:

答案 0 :(得分:0)

不要这样做:

$mail->setFrom($from, $fromName);

这是伪造的,将导致邮件发送失败,拒绝或垃圾邮件过滤。改为这样做:

$mail->setFrom($to);
$mail->addReplyTo($from, $fromName);

这样,您就不会伪造发件人地址,但答复仍将提交给提交者。

我还建议您阅读the troubleshooting guide,该书专门讨论了此问题以及许多其他问题。