Як захистити свій сайт від тимчасових пошт за допомогою api.testmail.top?

Як захистити свій сайт від тимчасових пошт

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

А ще, у тебе є козир в рукаві - це параметр "error":, якщо все йде добре, то він завжди дорівнює 0, якщо користувач допускає помилки, то цей параметр приймає числові значення, ти при бажанні можеш наставити його на істинний шлях, підказавши, щоб він перевірив правильність введення EMAIL

API: Перевiрка домена/адреси поштової скриньки

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 вiдповiдь:

					{
    "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 вiдповiдь:

					{
    "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" - дiдько його знає що це, сподіваюся ні у кого не вискочить🤞