设置PHP邮件程序,但仍然无法正常工作。我做错了什么?

时间:2016-04-25 22:05:59

标签: php html phpmailer

我正在设置php邮件程序,当有人用信息填写我的表单时给我发送电子邮件。 目前它是文件" index.php"

上的单页网站

这是我的php:

  <?php

  include("includes/class.phpmailer.php");

  $mail = new PHPMailer;

  $mail->setFrom($email, $name);
  $mail->addAddress("myemail@gmail.com");     // Add a recipient
  $mail->addReplyTo($email, $name);

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

  $mail->Subject = 'Message From ' . $name;

  $mail->Body    = "
  <h2>Message Details</h2>              
  <p>Name: {$name} </p>
  <p>Email: {$email} </p>
  <p>Phone: {$phone} </p>
  ";
   ?>

请注意我删除了我的电子邮件以保护隐私。

以下是我在同一&#34; index.php&#34;文件

    <form id="contact" method="post" action="index.php">
    <ul>
    <h2>Contact</h2>
   <li><input type="text" id="name" name="name" placeholder="Your Name" value="<?php echo $name; ?>"></li>
    <li><input type="email" id="email" name="email" placeholder="Email Address"  value="<?php echo $email; ?>"></li>
    <li><input type="phone" id="phone" name="phone" placeholder="Phone Number" value="<?php echo $phone; ?>"></li>
    <li><textarea name="message" id="message" placeholder="Your Message">    </textarea></li>
    <li><input type="submit" id="submit" name="submit"></li>
    </ul>
    </form>

对于我的生活,我无法弄清楚为什么这不起作用,并希望得到任何帮助。谢谢

6 个答案:

答案 0 :(得分:1)

您需要解析POST请求,这是执行此操作的一种方法:

   if(!empty($_POST['name'] && !empty($_POST['email'] && !empty($_POST['phone']){

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

    include("includes/class.phpmailer.php");
    //the rest of you code ...
    //and finally $mail->Send()

    if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
    echo "Message sent!";
    }

    }

注意:

查看一些PHPMailer examples

答案 1 :(得分:1)

要使此表单生效,您需要添加

$mail->send()

如果您使用简单的谷歌,可以使用许多表单模板,或者使用这些论坛提供大量关于表单等的simalar问题。

解析字段的最简单方法是,你可以在这里阅读$ _POST http://php.net/manual/en/reserved.variables.post.php

$name = $_POST['name'];

您可能会发现此主题对于通读也很有用,可以让您更清楚地通过phpmailer发送表单数据。

PHPmailer: Send from form

答案 2 :(得分:0)

index.php中,仅在您拥有有效的POST值时才执行电子邮件。此外,我没有看到您实际通过$mail->send()方法发送电子邮件。

它应该是这样的:

if (count($_POST) > 0 && isset($_POST['submit'])) {

    include("includes/class.phpmailer.php");

    $mail = new PHPMailer;
    $mail->setFrom($email, $name);
    $mail->addAddress("myemail@gmail.com");     // Add a recipient
    $mail->addReplyTo($email, $name);

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

    $mail->Subject = 'Message From ' . $name;

    $mail->Body    = "
        <h2>Message Details</h2>              
        <p>Name: {$name} </p>
        <p>Email: {$email} </p>
        <p>Phone: {$phone} </p>
    ";
}

答案 3 :(得分:0)

要实际发送消息,请在拥有Subject,Body,addAddress等后调用Send()函数:

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

答案 4 :(得分:0)

我没看到

$mail->send()

但我看不到php脚本的结束。但是你忘记了吗?

如果你有,那么将$SMTPDebug设置为大于0并查找phpmailer日志以查找错误

答案 5 :(得分:0)

如果您仍然无法发送电子邮件,则需要在服务器上查看托管公司的电子邮件设置。很多时候,如果您使用的是受欢迎的smtp,则需要检查gmail smtp设置。

您可能需要致电他们并获得一些支持,说明您无法发送电子邮件的原因。这是一个常见问题。

以下是使用phpmailer进行gmail SMTP设置的示例。

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "mail.yourdomain.com"; // SMTP server
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$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   = "yourusername@gmail.com";  // GMAIL username
$mail->Password   = "yourpassword";            // GMAIL password