Categories: Python

Как проверить email-адреса на существование

У вас есть база эмейл-адресов? Но сколько из них валидных? Сколько реально существующих, рабочих в данный момент, не удаленных и не заблокированных? Вот и я подумал как это можно проверить. Подобрал и протестировал несколько модулей для python, слал запросы через telnet, проверял через сайты. И решил поделиться с вами как можно проверить рабочий email или нет.

Как проверить существование мейла через telnet

Данный способ я опробовал на личных доменах, mail.ru, gmail.com и Яндекс. Gmail в большинстве случаев сбрасывал подключение и толкового ничего не добился (использовал модуль для python). Кроме того, для подключения к gmail я использовал 587 порт, а не 25. А теперь по порядку.

1. Открываем командную строку (cmd). Вводим

nslookup -q=mx mail.ru

Этот код проверяет записи MX для домена. Для гугла вводите gmail.com

nslookup для mail.ru

2. Дальше подключаемся по telnet. Пишем

telnet mxs.mail.ru 25
Как проверить существование эмейл адреса. Подключаемся по telnet

Не забывайте писать порт. Я вначале забыл и долго думал почему не коннектится. Если у вас пишет «telnet не является внутренней или внешней командой…», то его нужно включить в настройках Windows.

В случае с gmail.com я подключался к smtp.gmail.com по 587 порту , но все равно подключение сбрасывалось.

telnet smtp.gmail.com 587

3. После того как подключились по telnet пора отправлять запросы.

Запросы telnet для проверки существования email

Сначала —

helo bdseoru

 . Это начало (можно ehlo bdseoru). Дальше почта, с которой тестируется отправка.

mail from: prolisk@gmail.com

Mail from, как оказалось, играет важную роль. Если у домена нет своего smtp сервера, то дальше не пройдете.
Потом пишем эмейл получателя (именно то, что нам нужно тестировать)

rcpt to: mailbdseo5555@mail.ru

Если мы получаем код ответа 250, значит все хорошо.

Но это в большинстве случаев. С почтой mail.ru все адреса возвращают код 250. То есть сервера мейл.ру готовы принять письмо, но адресат может не существовать (и соответственно письмо не дойдет, а отправитель может получить авто ответ от mail.ru).

Как проверить существование email на mail.ru

Если проверяемый эмейл адрес размещен на mail.ru, то можно проверить двумя способами. Вариант первый — зайти на «мой мир» и ввести эмейл в строке поиска.

Рабочий email или нет. На mail.ru

Вариант второй — воспользоваться формой восстановления пароля. Если адрес не существует, то будет ошибка.

Mail.ru восстановление пароля

А если существует — то форма для ввода секретного слова.

Как проверить рабочий email или нет через Python

Я проверил несколько модулей. Более быстрым и точным для меня показался validate_email. Ставится он через pip, вместе с ним нужно поставить pyDNS (для проверки на существование).

pip install validate_email
pip install pyDNS

Скорее всего, Вы получите ошибку при установке pyDNS. Я пользуюсь Python3 и мне помогла установка py3dns, и с версией.

pip install py3dns==3.1.1a0

Код очень простой. Импортируем модуль и делаем проверку:

from validate_email import validate_email
is_valid = validate_email("test_post@bdseo.ru", verify=True)
print(is_valid)

Если адрес существует, выведет True, если нет — None.

Чтобы проверить мейл адреса списком, воспользуемся циклом for:

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:

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 адреса на существование?

veniamin

Recent Posts

Как заработать токен NOT за стейкинг BNB или FDUSD

Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…

6 месяцев ago

Как заработать TON и NOT за стейкинг в телеграм

Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…

6 месяцев ago

Бонус 100 USDT +10 BUSD от Binance

Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…

3 года ago

Как парсить длительность видео youtube на php в привычном виде

Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…

3 года ago

Как удалить чужую сессию пользователя в ubuntu (linux)

Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…

3 года ago

Как наложить watermark на видео в python windows массово

Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…

3 года ago