В этом посте я расскажу, как используя командную строку проверить существует ли определенный адрес 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. Используйте с осторожностью.