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 记录,但这超出了这个问题的范围。
最近我在我的网站上修复了我的联系表,但我遇到了问题。人们可以向我发送电子邮件,而无需在联系表单框中输入任何内容。
很多人只需按下“发送”按钮即可,而无需键入任何令人讨厌的内容。
要解决这个问题吗?
这是我的 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 记录,但这超出了这个问题的范围。