Проверка существования email-адреса

Компьютерное

В этом посте я расскажу, как используя командную строку проверить существует ли определенный адрес email или нет — без отправки письма на этот email. Вам не придется платить за какой-то сервис или отправлять письма. Вы можете это сделать совершенно бесплатно из командной строки столько раз и со столькими адресами сколько вам нужно!

Когда вы отправляете email на адрес user@domain.com, отправляющий почтовый сервер смотрит MX записи на DNS для ‘domain.com’ и если найдена одна или несколько MX записей, отправляющий сервер пытается доставить email на сервер указанный в MX-записи для домена domain.com.

Давайте попробуем проверить, существует ли адрес someuser@gmail.com или нет. Сначала, поищем существуют ли MX-записи для домена получателя, в примере это gmail.com. Мы будем использовать утилиту просмотра DNS которая называется dig она установлена на большинстве Linux систем. В командной строке наберите:

$ dig gmail.com MX

Вывод отобразит что-то вроде такого:

 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> gmail.com MX @8.8.8.8
;; global options: +cmd
;; Got answer:
;; - > >HEADER< < - opcode: QUERY, status: NOERROR, id: 32294
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
 
;; QUESTION SECTION:
;gmail.com.                     IN      MX
 
;; ANSWER SECTION:
gmail.com.              3599    IN      MX      10 alt1.gmail-smtp-in.l.google.com.
gmail.com.              3599    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3599    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3599    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              3599    IN      MX      5 gmail-smtp-in.l.google.com.
 
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Aug 26 10:13:19 2016
;; MSG SIZE  rcvd: 150
;

Как вы можете видеть, выведено несколько записей MX и перед каждой из них стоит цифровое значение. Это приоритет. Чем меньше значение, тем выше приоритет. Отправляющий почтовый сервер сначала пробует отправить email на сервер с самым высоким приоритетом. У нас получается это ‘gmail-smtp-in.l.google.com’

Далее, нам надо подключиться к почтовому серверу ‘gmail-smtp-in.l.google.com’ по 25 порту (SMTP) для подтверждения правильности email адреса someuser@gmail.com. Для этого можно использовать telnet или netcat. Обе утилиты доступны в репозиториях большинства систем Linux.

$ nc gmail-smtp-in.l.google.com 25 # или telent gmail-smtp-in.l.google.com 25
220 mx.google.com ESMTP a12si21630825itb.5 - gsmtp

Для начала диалога с сервером наберите HELO. Некоторые сервера так же принимают приветствие EHLO вместо HELO. После приветствия, вам нужно рассказать с какого вы сервера пришли (допустим с mydomain.com).

HELO mydomain.com
250 mx.google.com at your service

Наберите: mail from:<myname@mydomain.com> чтобы рассказать серверу от чьего имени вы собираетесь с ним говорить

mail from:myname@mydomain.com;
250 2.1.0 OK v72si21823782itb.85 - gsmtp

Если сервер ответил “250”, значит можно двигаться дальше. Набирайте: rcpt to:<someuser@gmail.com>

rcpt to:someuser@gmail.com
250 2.1.5 OK v72si21823782itb.85 - gsmtp

Ответ сервера на эту команду и скажет нам - действительно ли существует такой email как “someuser@gmail.com” или нет.
Если ответ будет “250 OK” значит такой адрес существует.

Если же ответ будет “550” значит запрашиваемый вами аккаунт email не существует.

rcpt to:someuser@gmail.com
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1  https://support.google.com/mail/answer/6596 y18si12470464ioi.55 - gsmtp

На заметку, если вы будете повторять такие процедуры очень часто и с одного и того же IP вас могут забанить по IP. Используйте с осторожностью.

Оцените статью
( Пока оценок нет )
Блог админа