当前位置

Drupal站点联络表屏蔽来自俄罗斯的垃圾邮件

James Qi 在 2018年3月21日 - 16:04 提交

  Drupal网站有站点联络功能,是通过填写contact表单来发送邮件实现的,我们总是收到一些来自俄罗斯的垃圾邮件,这些俄罗斯黑客有一定技术,可以识别图片验证码,使我们的主要反垃圾措施失效,但垃圾终究是垃圾,这种长期自动骚扰别人的做法,这世界上做得最多的就是俄罗斯人和中国人了,真是为国家丢脸,希望中国人干这些事的人以后少些吧。

  早就想找办法来屏蔽,本来Drupal还自己带有“触发”、“动作”机制的,但好像原来屏蔽关键词就没有实验成功,所以这次干脆找底层API来解决,通过1个小时的摸索,找到了办法。

  在自定义模块(如果没有自定义模块,可以修改theme主题下的template.php程序)中添加以下代码:

function my_module_mail_alter(&$message) {//调用hook_mail_alter
  if (strpos($message['from'],'.ru') != FALSE) {//“来自”里面的邮箱地址包含.ru的一律不发送
  $message['send'] = FALSE;
  }
  if (isRussian(implode("|",$message['body'])) || isRussian($message['subject'])) {//“正文”或者“标题”里面包含俄文字母的一律不发送
  $message['send'] = FALSE;
  }
}

function isRussian($text) {//判断是否包含俄文的函数
    return preg_match('/[А-Яа-яЁё]/u', $text);//正则表达式判断是否包含俄文字母
}

  测试可以实现预期的效果,虽然带有俄文的内容也可以提交成功,甚至系统也给出了发送成功的提示信息,但实际上是没有发送出去的。

  希望这个办法可以给受到类似骚扰的Drupal站长以帮助,也可以启发实现其它的一些特征屏蔽。