-6

目前,我们收到了大量垃圾邮件。我刚刚添加了以下行:

if ($field_budget == "" || $field_timeline == "" || $field_email == "" || $field_name == "") { echo "Please fill out all required form details, thank you!"; } else {

这帮助了几个星期,但现在垃圾邮件发送者又回来了。什么是改进我的表单的简单、优雅的方法(下面的完整代码)?

<?php
$field_name = $_POST['cf_name'];
$field_email = $_POST['cf_email'];
$field_website = $_POST['cf_website'];
$field_company = $_POST['cf_company'];
$field_budget = $_POST['cf_budget'];
$field_custombudget = $_POST['cf_custombudget'];
$field_timeline = $_POST['cf_timeline'];
$field_message = $_POST['cf_message'];

$mail_to = 'sean@seanduran.com';
$subject = 'Message from a site visitor, '.$field_name;

$body_message = 'Name: '.$field_name."\n";
$body_message .= 'e-mail: '.$field_email."\n";
$body_message .= 'Website: '.$field_website."\n";
$body_message .= 'Company: '.$field_company."\n";
$body_message .= 'Budget: '.$field_budget."\n";
$body_message .= 'Custom Budget: '.$field_custombudget."\n";
$body_message .= 'Timeline: '.$field_timeline."\n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

if ($field_budget == "" || $field_timeline == "" || $field_email == "" || $field_name == "") {
    echo "Please fill out all required form details, thank you!";
} else {
    $mail_status = mail($mail_to, $subject, $body_message, $headers);

    if ($mail_status) { ?>
        <script language="javascript" type="text/javascript">
            alert('Thank you for the message. We will contact you shortly.');
            window.location = 'http://seanduran.com';
        </script>
    <?php
    }
    else { ?>
        <script language="javascript" type="text/javascript">
            alert('Message failed. Please, send an email to sean@seanduran.com');
            window.location = 'http://seanduran.com';
        </script>
    <?php
    }
}
?>
4

4 回答 4

3

你可以使用一个技巧也许——

插入一个文本字段,通过 CSS(id)隐藏它并检查它必须是空的!

所有的垃圾邮件机器人都用一些东西填充字段,所以只需给它一个名称“地址”之类的东西......

如果机器人填写它,你可以给出一个错误......

其他提示只是使用ReCaptcha

于 2012-09-14T06:07:30.693 回答
1

我会介绍一个验证码。垃圾邮件发送者也很擅长解决这些问题,但这是一个很好的附加措施。看看例如 reCAPTCHA,添加起来应该不会太难(请参阅此处的说明)。

于 2012-09-14T06:09:03.647 回答
0

对于一般更改

  • 验证所有发布数据。检查标头注入
  • 验证码

查看这篇文章作为一个好的开始:http ://www.digital-web.com/articles/bulletproof_contact_form_with_php/

于 2012-09-14T06:09:35.697 回答
0

将您的姓名和电子邮件字段更改为:

Name: <input type="text" name="cf_123" />
Email: <input type="text" name="cf_456" />

引用如下:

$field_name  = $_POST['cf_123'];
$field_email = $_POST['cf_456'];

然后添加这些字段:

<input type="text" name="name" class="foo" />
<input type="text" name="email" class="foo" />

..用这个CSS:

.foo {
    display : none;
}

然后你可以简单地将这个条件添加到你的 PHP 中:

if (!empty($_POST['name']) || !empty($_POST['email'])) {
    return false; // only a bot would see those fields and fill them out. 
}
于 2012-09-14T06:10:06.217 回答