У вас есть база эмейл-адресов? Но сколько из них валидных? Сколько реально существующих, рабочих в данный момент, не удаленных и не заблокированных? Вот и я подумал как это можно проверить. Подобрал и протестировал несколько модулей для python, слал запросы через telnet, проверял через сайты. И решил поделиться с вами как можно проверить рабочий email или нет.
Как проверить существование мейла через telnet
Данный способ я опробовал на личных доменах, mail.ru, gmail.com и Яндекс. Gmail в большинстве случаев сбрасывал подключение и толкового ничего не добился (использовал модуль для python). Кроме того, для подключения к gmail я использовал 587 порт, а не 25. А теперь по порядку.
1. Открываем командную строку (cmd). Вводим
1 | nslookup -q=mx mail.ru |
Этот код проверяет записи MX для домена. Для гугла вводите gmail.com
2. Дальше подключаемся по telnet. Пишем
1 | telnet mxs.mail.ru 25 |
Не забывайте писать порт. Я вначале забыл и долго думал почему не коннектится. Если у вас пишет «telnet не является внутренней или внешней командой…», то его нужно включить в настройках Windows.
В случае с gmail.com я подключался к smtp.gmail.com по 587 порту , но все равно подключение сбрасывалось.
1 | telnet smtp.gmail.com 587 |
3. После того как подключились по telnet пора отправлять запросы.
Сначала —
1 | helo bdseoru |
. Это начало (можно ehlo bdseoru). Дальше почта, с которой тестируется отправка.
1 | mail from: prolisk@gmail.com |
Mail from, как оказалось, играет важную роль. Если у домена нет своего smtp сервера, то дальше не пройдете.
Потом пишем эмейл получателя (именно то, что нам нужно тестировать)
1 | rcpt to: mailbdseo5555@mail.ru |
Если мы получаем код ответа 250, значит все хорошо.
Но это в большинстве случаев. С почтой mail.ru все адреса возвращают код 250. То есть сервера мейл.ру готовы принять письмо, но адресат может не существовать (и соответственно письмо не дойдет, а отправитель может получить авто ответ от mail.ru).
Как проверить существование email на mail.ru
Если проверяемый эмейл адрес размещен на mail.ru, то можно проверить двумя способами. Вариант первый — зайти на «мой мир» и ввести эмейл в строке поиска.
Вариант второй — воспользоваться формой восстановления пароля. Если адрес не существует, то будет ошибка.
А если существует — то форма для ввода секретного слова.
Как проверить рабочий email или нет через Python
Я проверил несколько модулей. Более быстрым и точным для меня показался validate_email. Ставится он через pip, вместе с ним нужно поставить pyDNS (для проверки на существование).
1 2 | pip install validate_email pip install pyDNS |
Скорее всего, Вы получите ошибку при установке pyDNS. Я пользуюсь Python3 и мне помогла установка py3dns, и с версией.
1 | pip install py3dns==3.1.1a0 |
Код очень простой. Импортируем модуль и делаем проверку:
1 2 3 | from validate_email import validate_email is_valid = validate_email("test_post@bdseo.ru", verify=True) print(is_valid) |
Если адрес существует, выведет True, если нет — None.
Чтобы проверить мейл адреса списком, воспользуемся циклом for:
1 2 3 4 5 6 7 | from validate_email import validate_email list_emails = ['atest93@yandex.ru', 'st24234234793@bk.ru', 'blackjsdnw9834@gmail.com','bdseoru@gmail.com','admin_post@bdseo.ru'] for i in list_emails: is_valid = validate_email(i, verify=True) print(is_valid) |
И все мне в этом модуле нравится, но вот адреса mail.ru он не определяет. Кстати, вот еще некоторые примеры для модуля validate_email:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from validate_email import validate_email #import модуля is_valid = validate_email('for_post_mail@bdseo.ru') #просто проверка на правильность мейла print(is_valid) #выведет True если похоже на эмейл адрес is_valid = validate_email('a_bdseoru@mail.ru', check_mx=True) #проверка mx записей для домена print(is_valid) #true, если есть запись mx для домена is_valid = validate_email('a_bdseoru@mail.ru', verify=True) #проверка мейла на существование print(is_valid) #true, если email существует; none - если нет или не определил. is_valid = validate_email('a_bdseoru@bdseo.ru', check_mx=True, verify=True) #скорее всего при verify=True check_mx необязателен. print(is_valid) |
Заключение
Некоторые smtp сервера также позволяют получить статус email адреса. Например, при запросе к почте что на яндексе, можно получить ответ что пользователь не существует.
Есть сайты, где можно проверить статус эмейл адреса онлайн. Кроме того, что там иногда капча (для массовой проверки не годится), так еще и проверка не 100% точная: одни адреса несуществующие определяют как реальные (пример с mail.ru); другие как несуществующие, хотя они полностью рабочие (на своих доменах).
Есть программы-чекеры. Но опять же — 100% правды они не показывают, не говоря уже о вирусах в программах-оболочках (когда функционал проверки и не заложен даже). Прежде чем скачивать такие программы — подумайте.
А как Вы проверяете email адреса на существование?
0 Comments