PHP电子邮件表单拍摄空白电子邮件

时间:2016-02-24 21:12:06

标签: php forms email

我为网站整理了一个简单的PHP电子邮件表单,但它经常发送空白电子邮件。大多数字段都是“必需的”,我使用验证码系统已有一段时间了,但空白的电子邮件不断出现。

HTML标记:

<form action="mail_send.php" method="post">

<input name="name" type="text" required="required" size="40" />

<input name="email" type="text" required="required" size="40" />

<input name="company" type="text" size="40" />

<textarea name="message" cols="80" rows="7" required="required"></textarea>

<input type="submit" value="Submit" />

</form>

PHP:

$name = $_POST['name'];
$email = $_POST['email'];
$company = $_POST['company'];
$message = $_POST['message'];
$formcontent=" FROM:\n $name \n\n COMPANY:\n $company \n\n MESSAGE:\n $message";
$recipient = "email address";
$subject = "Subject";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");

echo "<script>window.location = 'confirmation.php'</script>";

我测试时一切正常,我收到来自表单的电子邮件完全没有问题,但由于某种原因,我经常收到空白的电子邮件(可能来自机器人)。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

如果您的HTML表单和PHP在同一个文件中,而您没有检查这些输入是否为空,则可能会发生这种情况。如果不是在同一个文件中,不检查空白,仍然适用。

你可能是机器人的受害者,或者一些小丑经常访问你的网站只是为了打扰你。

或者表单的方法网址是由某人或某事直接访问的,这是我觉得这里可能存在的问题,因为您的输入确实有required

  • 检查您的访问日志。

因此,对所有输入使用条件!empty()

即:

旁注:||检查一个或任何一个是否为空。

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

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

   // process mail

}

您可以添加其他内容。

或者为您的提交提供名称属性:

<input name="submit" type="submit" value="Submit" />

然后检查按钮是否已设置且输入是否为空:

if(isset(_POST['submit'])){

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

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

       // process mail

    }

}

您还应该使用过滤器来输入电子邮件:

另外,如果您决定稍后使用无线电/复选框,请对其使用isset()

<强>旁注:

您可以在表单中添加一个复选框,以检查是否已选中,并使用条件语句处理它。

脚注:

  

&#34;大多数字段都是&#34;必需&#34;我暂时使用验证码系统,但空白的电子邮件不断发布。&#34;

您的问题中没有任何验证码可以支持此功能。

<强> N.B:

必需属性仅适用于支持HTML5的浏览器。因此,如果您网站上的任何机器人或访问者使用的浏览器不支持HTML5,或者可以绕过它的技术,那么这也可能是另一个(贡献)因素。

答案 1 :(得分:2)

您需要对PHP进行验证。

http://www.w3schools.com/php/php_form_validation.asp

基本上您需要执行以下操作:

安全

    <?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

验证

if (!empty($email)){
    //your code to send email
}

如果你想检查不止一件事,你可以让它变得更复杂。

$fail_validation = FALSE;
if (empty($email)){
   $fail_validation = TRUE;

}
if (empty($phone)){
   $fail_validation = TRUE;

}
if ($fail_validation == FALSE){
  //code to send mail goes here
}

请注意,这是非常基本的,您可能需要考虑一些额外的功能来保护PHP。我还建议使用蜜罐作为额外的安全层。 https://stackoverflow.com/a/22103646/2547075

答案 2 :(得分:0)

<textarea name="message" cols="80" rows="7" required="required"></textarea>

应该是

<textarea name="message" cols="80" rows="7" required></textarea>

您在撰写XHTML还是HTML?

还建议在服务器端进行验证。请参阅下面的答案,了解如何操作。

答案 3 :(得分:0)

  

但由于某种原因,您收到了空白的电子邮件,可能来自机器人

几乎回答了你的问题。机器人可以非常先进,并打破某些Captcha'a以及发布空白的帖子请求。您应该检查帖子请求是否为空。

牢不可破的验证码是您自己编写的(并且在您的网站变得流行之前不会传播它)或the recently introduced one from Google。尝试一下(一旦你检查了empty值)