Большинство ботов тупые и не выполняют JS код на странице. Поэтому обычно хватает такой конструкции (используется jQuery):
Перед закрывающим тегом </body>
<script>
$('form').append('<input type="hidden" name="zayac" value="ubezhal">')
</script>
И делай в PHP проверку где принимаешь данные из формы как нибудь так:
if (empty($_GET['zayac']) or $_GET['zayac'] != 'ubezhal') exit("Error, please enable JS in your browser");
От автоматических рассылок это спасает, а от направленной спам атаки нет.
Там уже юзать: CSRF, reCAPTCHA, Cloudflare или тот же fail2ban, как написали ранее