我对PHP很新(我更偏爱Ruby),但我公司的网站有一个电子邮件表格,客户可以填写订购样品。我从@yahoo域获取垃圾邮件。我可以在我的formmailer.php文件中插入一段代码,这些代码可以阻止Yahoo的人员在表单中提交内容吗?
感谢先进的任何建议!!
更新
<form action="formmailer.php" method="post" id="contact" style="margin-bottom: 0;" onsubmit="return math_check()">
以及使用过的
中的脚本<script type="text/javascript">
function math_check(){
var nr = document.getElementById("math_check").value;
if (nr != 7) {return false;}
else {return true;}
}
</script>
我必须对此进行一些研究,以便将来有更好的计划。谢谢你的帮助。
答案 0 :(得分:1)
在电子邮件地址中搜索域名:
if (preg_match("/@yahoo/", $email)){
//Yahoo domain detected.
}
答案 1 :(得分:0)
将其中一个选项添加到您的文件中,而不是阻止整个域:
PHP解决方案:
(假设您使用方法POST的表单)
在您的表单文件中:
3 + 4 = <input type="text" id="math_check" value="?" name="math_check" />
在您的邮件/ php文件中:
$math_check = $_POST["math_check"];
if ( != 7) {die()};
您也可以使用javascript执行此操作,如果人类错过了数学测试,可能更容易说:)
Javascript解决方案:
的 (Demo here) 强>
:
<form action="formmailer.php" method="post" id="contact" style="margin-bottom: 0;" onsubmit="return false;">
<input type="text" id="math_check" />
<button type="submit" />Submit</button>
</form>
以及仅在数字为7时才提交的javascript:
window.onload = function () {
var form = document.getElementById("contact");
function math_check() {
var nr = document.getElementById("math_check").value;
if (nr != 7) {
return false;
} else {
form.submit();
}
}
form.addEventListener("submit", math_check, false);
};
答案 2 :(得分:0)
我确定你可以查看电子邮件地址表单的输入字符串,然后检查“雅虎”这个词是否存在,就像Jaris的答案一样,但那很疯狂,因为任何有雅虎的真正用户!电子邮件将被封锁。您应该实施某种类型的CAPTCHA,例如reCAPTCHA,以阻止Spambots填写您的表单。
如果您不喜欢CAPTCHA,您可以尝试其他方式来检测是否是提交表单的真人,例如简单的数学问题(尽管这些问题可以很容易地解决,但如果它是一个低流量站点,它将至少停止简单的垃圾邮件机器人)。您也可以使用Honeypot字段,也可以限制表单提交的次数。检查this page以获取CAPCTHA的其他替代方案。
我并不是说这将是万无一失的,但它比阻止碰巧使用雅虎电子邮件地址的任何可怜的灵魂更好。