PHP邮件表单不发送

时间:2015-04-25 21:13:44

标签: php html email

我从网站复制了邮件表单和PHP邮件。但它似乎没有用。它不发送任何东西或作出任何反应。我试图找到错误,但我不熟悉PHP。我尝试编辑$ emailFrom = ...到$ _POST ['email'];但这也不起作用..

HTML:

<div id="form-main">
            <div id="form-div">
                <form class="form" id="form1">
                    <p class="name">
                        <input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Naam"/>
                    </p>
                    <p class="email">
                        <input name="email" type="text" class="validate[required,custom[email]] feedback-input" placeholder="E-mail" />
                    </p>
                    <p class="text">
                        <textarea name="text" class="validate[required,length[6,300]] feedback-input" placeholder="Bericht"></textarea>
                    </p>
                    <div class="submit">
                        <input type="submit" value="Verstuur" id="button-blue"/>
                    <div class="ease"></div>
                    </div>
                </form>
            </div>
        </div>

PHP:

    <?php

include 'functions.php';

if (!empty($_POST)){

  $data['success'] = true;
  $_POST  = multiDimensionalArrayMap('cleanEvilTags', $_POST);
  $_POST  = multiDimensionalArrayMap('cleanData', $_POST);

  //your email adress 
  $emailTo ="lisa-ederveen@hotmail.com"; //"yourmail@yoursite.com";

  //from email adress
  $emailFrom =$_POST['email']; //"contact@yoursite.com";

  //email subject
  $emailSubject = "Mail from Porta";

  $name = $_POST["name"];
  $email = $_POST["email"];
  $comment = $_POST["comment"];
  if($name == "")
   $data['success'] = false;

 if (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)) 
   $data['success'] = false;


 if($comment == "")
   $data['success'] = false;

 if($data['success'] == true){

  $message = "NAME: $name<br>
  EMAIL: $email<br>
  COMMENT: $comment";


  $headers = "MIME-Version: 1.0" . "\r\n"; 
  $headers .= "Content-type:text/html; charset=utf-8" . "\r\n"; 
  $headers .= "From: <$emailFrom>" . "\r\n";
  mail($emailTo, $emailSubject, $message, $headers);

  $data['success'] = true;
  echo json_encode($data);
}
}
?>

2 个答案:

答案 0 :(得分:2)

您的表单不完整,错过了method(POST)和action(您的php文件名)

请改为尝试:

<div id="form-main">
            <div id="form-div">
                <form action="sendEmail.php" method="POST" class="form" id="form1">
                    <p class="name">
                        <input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Naam"/>
                    </p>
                    <p class="email">
                        <input name="email" type="text" class="validate[required,custom[email]] feedback-input" placeholder="E-mail" />
                    </p>
                    <p class="text">
                        <textarea name="comment" class="validate[required,length[6,300]] feedback-input" placeholder="Bericht"></textarea>
                    </p>
                    <div class="submit">
                        <input type="submit" value="Verstuur" id="button-blue"/>
                    <div class="ease"></div>
                    </div>
                </form>
            </div>
        </div>

<强> sendEmail.php

    <?php

//include 'functions.php';

if (!empty($_POST)){

  $data['success'] = true;
  //$_POST  = multiDimensionalArrayMap('cleanEvilTags', $_POST);
  //$_POST  = multiDimensionalArrayMap('cleanData', $_POST);

  //your email adress 
  $emailTo ="lisa-ederveen@hotmail.com"; //"yourmail@yoursite.com";

  //from email adress
  $emailFrom =$_POST['email']; //"contact@yoursite.com";

  //email subject
  $emailSubject = "Mail from Porta";

  $name = $_POST["name"];
  $email = $_POST["email"];
  $comment = $_POST["comment"];
  if($name == "")
   $data['success'] = false;

 if (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)) 
   $data['success'] = false;


 if($comment == "")
   $data['success'] = false;

 if($data['success'] == true){

  $message = "NAME: $name<br>
  EMAIL: $email<br>
  COMMENT: $comment";


  $headers = "MIME-Version: 1.0" . "\r\n"; 
  $headers .= "Content-type:text/html; charset=utf-8" . "\r\n"; 
  $headers .= "From: <$emailFrom>" . "\r\n";
  mail($emailTo, $emailSubject, $message, $headers);

  $data['success'] = true;
  echo json_encode($data);
}
}
?>

答案 1 :(得分:2)

首先,您的表单:<form class="form" id="form1">

如果方法没有明确指示,则表格默认为GET。

如果你的HTML表单和PHP在同一个文件中,请使用这样的POST:

<form class="form" id="form1" method="post">

因为你正在使用POST数组。

<form class="form" id="form1" method="post" action="your_handler.php">

如果使用不同的文件;我使用your_handler.php作为示例文件名。

此外,<textarea name="text"...

根据您的<textarea name="comment"数组,

应为$_POST["comment"]

  • 使用错误报告会触发Undefined index text...通知。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

脚注:

我不知道multiDimensionalArrayMap('cleanEvilTags'做了什么,所以你必须检查一下。

如果您仍然没有收到邮件,请检查您的垃圾邮件。

做:

if(mail($emailTo, $emailSubject, $message, $headers)){
   echo "Mail sent.";
}

如果它回应&#34;邮件发送&#34;,那么mail()就完成了它的工作。一旦它结束,它就会失控。

你可以考虑使用PHPMailer或Swiftmailer这些是更好的解决方案,就像使用SMTP邮件一样。

现在,if (!empty($_POST)){并非完全解决方案。对所有输入最好使用条件!empty()。您的提交计为POST数组,只能使用额外的isset()来依赖它。

  • 如果您在自己的计算机上使用此功能,请确保已安装了Web服务器。我们不知道您的脚本是如何使用的。

如果您在自己的计算机上使用它,请确保PHP确实正在运行,正确安装和配置,包括任何与邮件相关的设置。

附加说明:

您还应该对所有条件陈述使用完整和适当的支撑。

这没有:

if($comment == "")
   $data['success'] = false;

应该读作

if($comment == ""){
   $data['success'] = false;
  }

同样的事情:

if($name == "")
   $data['success'] = false;
  • 不这样做可能会产生不利影响。
  

&#34;我从网站上复制了邮件表单和PHP邮件。&#34;

再次,关于multiDimensionalArrayMap('cleanEvilTags';如果你没有这个功能,那么你需要摆脱它,并为你的输入使用另一种过滤方法。

在PHP.net上查询以下各种过滤器选项: