PHP 联系表单垃圾邮件问题

Issue with PHP Contact Form Spam

最近我在我的网站上修复了我的联系表,但我遇到了问题。人们可以向我发送电子邮件,而无需在联系表单框中输入任何内容。

很多人只需按下“发送”按钮即可,而无需键入任何令人讨厌的内容。

要解决这个问题吗?

这是我的 PHP 代码:https://hastebin.com/ukowawovab.pl

这是我的 HTML 代码:https://hastebin.com/hisayacuji.xml

谢谢! 小塔

正如我在评论中所述,检查是否有任何空白字段。

即使添加了 required,机器人也可能直接访问 php 文件或其他文件。

<?php

if(!empty($_REQUEST['name'])

&& !empty($_REQUEST['email'])

&& !empty($_REQUEST['skype'])

&& !empty($_REQUEST['message'])){

 $to = "email@example.com";
 $subject = "FluxDesigns Contact Form";
 $name = $_REQUEST['name'];
 $email = $_REQUEST['email'];
 $skype = $_REQUEST['skype'];
 $message = $_REQUEST['message'];
 $ip = $_SERVER['REMOTE_ADDR'];
 $body = " Name: $name \n Email: $email \n Skype: $skype \n Message: $message \n\n IP Address: $ip";
 if (mail($to, $subject, $body)) {
   header('Location: /thanks');
   exit; // added that to prevent further execution
  }

 }
 else{
     echo "Fill in all fields";

     }

您可以另外添加一个复选框并检查它是否设置为 isset() 并相应地处理它。

但是,您应该按照 mail() 手册中的说明使用完整的 headers。否则,您可能收不到,也可能被视为垃圾邮件。

完整 headers 表示拥有有效的 From 电子邮件地址。

手册中的示例:

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

您还应该创建一个 SPF 记录,但这超出了这个问题的范围。