Как защитить свой сайт от временных почт с помощью api.testmail.top?

Как защитить свой сайт от временных почт

Итак, ниже будет скучное описание API, пока у тебя есть интузиазм запомни главное: основной параметр ответа "result":, если этот параметр принимает значение true - смело пропускай этот EMAIL на регистрацию, если false, то не торопись - скажи пользователю "Регистрация с временных почт запрещена политикой ресурса".

Так же, у тебя есть козырь в рукаве - это параметр "error":, если все идет хорошо, то он всегда равен 0, если пользователь допускает ошибки, то этот параметр принимает числовые значения, ты при желании можешь наставить его на истинный путь, подсказав, чтоб он проверил правильность ввода EMAIL

API: Проверка домена/адреса почты

URL: https://api.testmail.top/domain/check
Метод: GET
Пример запроса: https://api.testmail.top/domain/check/data=example@mail.com&ip=8.8.8.8
Заголовки: Authorization: Bearer XXXXXXXXXX.XXXXXXXXXX.XXXXXXXXXX

Параметры запроса

Параметр Описание
data Домен или же адрес почтового ящика
ip Не обязательный параметр. IP адрес клиента, который отправляет запрос на ваш ресурс, необходим для более детального отображения статистики

Заголовки запроса

Заголовок Описание
Authorization Bearer аутентификация, свой уникальный JWT токен, который является ключем API вы можете получить пройдя регистрацию в своем Личном кабинете

Приступим к практике

Рассмотрим запросы к api.testmail.top на примерах. Для попробуем отправить из запрос на проверку заведомо ложного домена/почты, взятого с одного из самых популярных сервисов временых почт temp-mail.org, из консоли

cURL запрос:

					curl --location --request GET 'https://api.testmail.top/domain/check?data=fovah86335@990ys.com&ip=154.115.9.195' \
--header 'Authorization: Bearer XXXXXXXXXX.XXXXXXXXXX.XXXXXXXXXX'

cURL ответ:

					{
    "error": 0,
    "result": false,
    "message": "This domain is in Blacklist"
}
					
				

В ответе получили "result": false - а это значит, что данного пользователя НЕЛЬЗЯ пускать на регистрацию


Теперь, попробуем отправить из запрос на проверку домена/почты при помощи PHP. Как и в прошлом примере, нет ничего сложного, теперь для примера отправим 100% трастовую почту GMAIL. От себя рекомендую выставить параметр CURLOPT_TIMEOUT на 3 секунды, хотя обычный запрос занимает доли секунды - это обезопасит вашу регистрацию от краха, в том случае если сервер api.testmail.top будет недоступен

PHP - cURL запрос:

					<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.testmail.top/domain/check?data=typicaluser@gmail.com&ip=154.115.9.195',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 3,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer XXXXXXXXXX.XXXXXXXXXX.XXXXXXXXXX'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
					
				

PHP - cURL ответ:

					{
    "error": 0,
    "result": true,
    "message": "This domain is in Whitelist"
}
					
				

В ответе получили "result": true - это значит, что данного пользователя МОЖНО пускать на регистрацию

Отлично, теперь немного углубимся в возможности api.testmail.top, рассмотрим несколько исключений:

В двух предыдущих примерах, мы рассматривали типичные почты, которые представляют BLACKLIST(временные почты, содержащиеся в нашей базе), так и WHITELIST(такие как GMAIL, YAHOO или YANDEX например...). Но что же делать в не стандартной ситуации?

  1. Домен почты пока что имеет статус "НЕОПРЕДЕЛЕН"

    Пользователь передает почту своего личного или корпоративного домена например admin@habr.ru, в этом случае ответ будет таков:

    								{
    "error": 0,
    "result": true,
    "unknown": true,
    "message": "Unknown domain. We will classify this domain shortly"
    }
    								
    							

    В ответе получили "result": true - а это значит, что данного пользователя МОЖНО пускать на регистрацию, поскольку мы пока точно не знаем что это за домен, и мы не можем "разбрасываться" нашими клиентами. После чего домен будет отправлен на проверку, обязательно определен, чтоб при повторном запросе уже ответить точно принадлежит ли он какому либо из списков.

  2. Пользователь допустил ошибку(синтаксическую) при вводе почты в форму регистрации

    Например admin@;habr.ru, в этом случае ответ будет таков:

    								{
        "error": 31,
        "result": false,
        "message": "Invalid email address"
    }
    								
    							

    В ответе получили "result": false - а это значит, что данного пользователя НЕЛЬЗЯ пускать на регистрацию. В этом случае необходимо обработать ошибку "error": 31 - которая подскажет вашему пользователю проверить коректность введенного им почтового адреса

  3. Или домен его почты вовсе не способен принимать почту?

    Например admin@habr1.ru, в этом случае ответ будет таков:

    								{
        "error": 36,
        "result": false,
        "message": "No mail server is attached to this domain"
    }
    								
    							

    В ответе получили "result": false - а это значит, что данного пользователя НЕЛЬЗЯ пускать на регистрацию. В этом случае необходимо обработать ошибку "error": 36 - которая подскажет вашему пользователю проверить коректность введенного им почтового адреса

В любой непонятной ситуации просто скажи пользователю проверить правильность написания EMAIL

Это необходимо, для того, чтобы небыло ложного ожидания со стороны пользователя завершительного этапа регистрации - подтверждения почты

Код ошибки
"error":
Описание
"message":
31 "Invalid email address" - синтаксическая ошибка в написании адреса почтового ящика
32 "Invalid data" - синтаксическая ошибка в написании адреса почтового ящика
33 "Invalid domain" - синтаксическая ошибка в написании домена почтового ящика
34 "Typo! This domain 1 level does not exist" - такого домена не существует
35 "No mail server is attached to this domain" - домен почтового ящика не способен принимать электронные письма
36 "No mail server is attached to this domain" - домен почтового ящика не способен принимать электронные письма
37 "Incoming data is too long" - слишком длинная строка
777 "Unknown Error" - чёрт его знает что это, надеюсь ни у кого не выскочит🤞