Yellowpages.uz — email`ы компаний актуальны?

Анализ электронных почтовых адресов в каталоге-справочнике Yellowpages.uz. Построение статистических графиков по собранной информации и некоторые размышления о дальнейшим развитие аналогичных проектов в Узбекистане.

Не так давно я работал над сайтом для ООО «ELEKTRO-MOTORS» и проводил почтовую рассылку их коммерческого предложения. Необходимо было разослать письма, в HTML-формате, не менее 500 организациям Узбекистана, поэтому, я сразу отказался от мысли проводить данную работу вручную и решил воспользоваться сервисом Mailchimp.

А где же взять почтовые адреса компаний? В Узбекистане на этот вопрос у многих один и тот же ответ — Yellowpages.uz или Goldenpages.uz. Мой выбор пал на Yellowpages.uz, и только за счёт, как кажется, более привлекательного дизайна сайта.

Начало работ

На сайте Yellowpages.uz электронные почтовые адреса компаний не в открытом виде, но если посмотреть исходный код страниц, то всё как на ладони. Из мета тега <meta itemprop="email" content="">, используемый для семантической разметки данных в сети (Schema.org), можно извлечь необходимые значения. Провёл несколько экспериментов (веб-сервер каталога не стал ограничивать доступ) и приступил к проектированию приложения.

В работе использовал: PHP 7, MySQL 5.7, GIT, Composer, Visual Studio Code, CakePHP 3 и несколько opensource библиотек, о которых упомянул ниже.

Схема базы данных

Отправлять коммерческое предложение всем подряд не эффективно, поэтому необходимо было учесть региональное расположение и сферу деятельности компаний. В справочнике Yellowpages.uz эта информация есть, оставалось только её собрать и, перед рассылкой, провести соответствующую выборку. Спроектировал следующую схему базы данных:

Рисунок 1. Схема базы данных.
Рисунок 1. Схема базы данных.

Парсинг Yellowpages.uz

Для HTML-парсинга я уже давно использую хорошую библиотеку PHP Simple HTML DOM Parser. Написал консольное приложение на PHP и запустил её 16-05-2019 в 12:32:04, через CRON, с интервалом в 1 минуту. Скрипт завершил работу 17-05-2019 в 11:49:16, проработав чуть менее суток. В результате были получены следующие данные:

Рассылка коммерческого предложения

Следующим этапом было составление списка получателей, с учётом региональной принадлежности и отрасли деятельности. В Mailchimp можно импортировать файл со списком контактов в формате CSV. Поэтому, я «забабахал» простое веб-приложение, отвечающее всем описанным требованиям:

И после завершения вёрстки шаблона письма и генерации списка контактов, всё было готово для рассылки коммерческого предложения. Выполнив все необходимые действия в Mailchimp, получил печальный результат:

Рисунок 2. Неудачная попыта проведения рассылки
Рисунок 2. Неудачная попыта проведения рассылки

В сообщение говорится о том, что автоматизированная система предотвращения злоупотреблений Omnivore выявила некоторые проблемные моменты в импортируемом списке контактов. К сожалению, а может и к счастью, никакой конкретики получить нельзя, и только скрупулёзная проверка всех возможных нюансов может решить возникшую проблему.

По опыту маститых маркетологов, причина может заключаться в некорректных или несуществующих адресах электронной почты из списка рассылки. Как показывает практика, полученная откуда-либо база контактов может содержать почтовые адреса с доменов, которые давно попали во все возможные спам-листы. Крупные почтовые сервера, для выявления нежелательной рассылки, подкидывают специальные почтовые адреса в общедоступные базы, тем самым дополнительно идентифицируя нежелательную рассылку.

В далёком 2014 году, когда я впервые познакомился с почтовым маркетинговым сервисом Mailchimp, не было надобности выяснять корректность полученных где-либо почтовых адресов. Если email не соответствовал определённым стандартам, он просто отбрасывался, и кампания успешно проходила по всем корректным адресам.

Сейчас же картина кардинально изменилась и для проведения кампании через таких гигантов как Mailchimp уже недостаточно просто купить или спарсить контакты и провести по ним рассылку. В настоящее время, 9 и 10 отправляемых писем по Интернету являются спамом. 90% практически бесполезной информации, которую всё равно приходится обрабатывать и передавать провайдерам и почтовым серверам. Рано или поздно, с этим пришлось бы бороться, поэтому, закручивание гаек происходит по естественным причинам.

Я не хотел бросать начатое дело, поэтому передо мной стал выбор из двух вариантов:

  1. Поднимаю почтовый сервер на арендованном VPS, с «белым» IP; провожу рассылку коммерческого предложения, не обращая внимания на корректность почтовых адресов получателей;
  2. Проверяю базу контактов, отсеиваю некорректные или не существующие адреса; провожу рассылку через Mailchimp.

Как вы, возможно, догадались, я остановился на втором пункте. И всё потому что мне было интересно проанализировать полученные данные с Yellowpages.uz.

Проверка электронных адресов

Однозначно определить существование адреса электронной почты можно с помощью SMTP. Но при работе с большой базой адресов желательно сперва отсеять те, что не соответствуют стандартам RFC, имеют в своём имени смешанные символы Unicode (spoofing check) или отсутствуют MX-записи в DNS. Поэтому я решил провести проверку в два этапа.

Я не проводил проверку электронных адресов с помощью регулярных выражений, потому что это бесполезно. Первый почему, второй почему и третий почему.

Этапа №1. RFC, Spoofing и DNS проверка

Для выполнения первого этапа воспользовался php-библиотекой egulias/EmailValidator, направленной на поддержку RFC 5321, 5322, 6530, 6531, 6532, а так же классов выявления подмены символов и проверки MX-записей в DNS.

RFC проверка

Проверка по стандартам RFC не выявила некорректных адресов, что, впрочем, не удивительно. Приведённые ниже адреса так же успешно проходят проверку:
"Joe\\Blow"@example.com, "Abc\@def"@example.com и "Fred Bloggs"@example.com.

Spoofing проверка

Проверку не прошли следующие 5 адресов электропочты (символы подмены выделены):
sаhib.k@bk.ru, вabadjanov.aziz@gmail.com, centrеuz@yandex.ru, megafarmserviсe@mail.ru и megafarmserviсodek@live.ru.

DNS проверка

На момент написания статьи, 359 адресов электронной почты не прошли данную проверку, из-за отсутствия MX-записей в DNS их доменов. Данный список не публикую, но готов поделиться с Yellowpages.uz

Этап №2. SMTP проверка

Я посчитал, что сперва не лишнем будет кратко описать принцип работы почтовой системы в Интернете и рассказать о некоторых принятых решениях, направленных на достижение поставленных задач. Если для вас эта тема не нова, переходите на подраздел результатов SMTP проверки.

Как работает почта в Интернете

Почтовой системе Интернета уже более 30 лет и при её проектировании брали за основу (с не которыми специфическими изменениями и дополнениями) уже устоявшуюся систему бумажной почтовой службы.

Мы, как абоненты (пользовательский агент или MUA) почтовой связи, привязаны к определённому почтовому отделению (почтовый сервер) и нашу корреспонденцию принимает и доставляет почтальон (агент передачи сообщений или MTA). Мы не может взаимодействовать непосредственно с получателем — за это отвечают наши MTA.

Необходимо понимать принципиальное различие между MTA и почтовым сервером. В простом выражение, почтовый сервер — это база учётных записей абонентов и их почтовых ящиков с содержащимися в них письмами. В свою очередь, MTA это программа обработки запросов и получения/отправки электронной корреспонденции. MTA напрямую взаимодействует с почтовым сервером и для упрощения, неформально, будем воспринимать их как единое целое. Архитектура почтовой системы в Интернете показана на Рисунке 3.

Рисунок 3. Архитектура почтовой системы в Интернете.
Рисунок 3. Архитектура почтовой системы в Интернете.

При отправке письма, мы передаём его в распоряжение MTA-отправителя, который, в свою очередь, устанавливает TCP-соединение с 25 портом MTA-получателя и отправляет приветственное сообщение.

Взаимодействие, при отправке, происходит по протоколу SMTP или его расширенной версии ESMTP.

При положительной реакции на обращение, MTA-отправитель сообщает от кого (FROM) письмо и к кому (TO) оно адресуется. Если адресат числится в базе почтового сервера получателя (и он не заблокирован), MTA-отправителя может переслать письмо. В противном случае, отправка невозможна. В этом и заключается ключ к решению поставленной мною задачи. После выяснения актуальности адреса получателя, мы просто сбрасываем SMTP-сессию, не отправляя ему сообщение.

Создатели SMTP протокола, возможно, были идеалистами, давая возможность беспрепятственно стучаться в «окна» агентов передачи сообщений для выяснения всей необходимой информации. Но такая идиллия осталась в далёком прошлом и метод описанный выше ни в каждом случае даст необходимый результат. Вот несколько моментов, которые я учёл при имитации работы MTA-отправителя:

  1. «Белый» IP. Провезти проверку через сеть провайдера Uzonline не удастся. Даже если динамически получен «чистый» IP, сеть нашего монополиста уже числится как разносчик спама во многих Black Lists, и большинство почтовых серверов просто отвергнут наши запросы. Данный вопрос я ещё намерен изучить более детально, но пока было принято решение арендовать зарубежный VPS с «белым» IP-адресом;
  2. Домен отправителя, SPF и PTR. К полученному IP привязал домен (запись A) и прописал PTR (обратный просмотр DNS, из IP в домен), создал соответствующий адрес электронной почты (доменная почта от Yandex), который выступал в качестве адреса отправителя. Добавил в DNS TXT-запись v=spf1 a include:_spf.yandex.net ~all, для указания списка серверов, имеющих право отправлять электронную почту. По этой записи MTA-получатели могут проверять сервера отправителей.

На PHP написал небольшой скрипт, открывающий соединение с интернет-сокетом MTA-получателя, и строящий диалог стандартными командами SMTP.

Проверив несколько тысяч электронных почтовых адресов мой IP-адрес добавили в серые списки, что закрыло доступ к самым привередливым почтовым серверам. Это стандартная процедура, являющаяся следствием резкого увеличения активности рассылки электронной почты. Покупку нового «белого» IP посчитал излишнем. Тем более, не так уж и многие почтовые сервера обращали внимание на серые списки.

Некоторые почтовые сервера, в особенности местные, никак не реагировали на запросы, и обращения прерывались временем ограничения соединения. Здесь уже ничего не поделаешь.

Результаты SMTP проверки

184 домена, включающие в себя 332 почтовых адреса, пришлось исключить из результатов исследования, из-за задержек или отказов MTA-получателей отвечать на мои запросы. Причин было несколько, в подразделе выше они рассмотрены.

uaz.uz, kamaz.uz, mda.uz, inbox.uz, nuroniy.uz, api.uz, rwnadzor.uz, autotrans.uz, vinsanoat.uz, exat.uz, energonazorat.uz, ujc.uz, unesco.org, undp.org, esrs.org, uzkommunhizmat.uz, mineconomy.uz, umail.ru, jvv.uz, yi.uz, standart.uz, istedod.uz, ims.org, impuls-audit.uz, mail.uz, ofb.uz, kkb.uz, isdb.org, annexurefs.com, mfer.uz, nbuig.uz, almulk.uz, lexinvestgroup.com, sgs.com, xinkon.net, birga.uz, uzmedexport.uz, uzinterimpeks.uz, good-zone.uz, goodzone.uz, technomart.uz, uzsolar.uz, electron.uz, coolcomfort.uz, korzinka.uz, rose.uz, orexa.com, orient.com, gmail.uz, hotelbukharapalace.com, carat-hotel.uz, hotelorientstar.com, radissonblu.com, zarexpo.com, advantour.com, alizamtour.uz, mir-jahon.uz, samarkanda-travel.com, audiopro.uz, infolib.uz, black.uz, xfk.uz, ilkhom.com, summer.uz, tabiat.uz, studio13.uz, epa-tools.uz, ahost.uz, everest.uz, sharifa.uz, buzton.com, garnet.uz, expertpro.uz, newmax.uz, hrs.ru, amo.uz, qsxv.uz, esomarket.com, aster.uz, com.uz, serviceyou.uz, spltd.uz, chernovplast.uz, mh-chine.com, well.uz, mebel-e.com, umail.com, lasante.uz, medikas.uz, doridarmon.uz, eyecenter.uz, td.uz, freenet.uz, poliklinika.uz, oca.msf.org, wyo.uz, omc.uz, saif-optima.uz, umt.uz, chortoqsan.uz, phoenix-pharm.uz, sid.uz, rusgazen.ru, gvcal.com, pdlworld.com, seb.com, velosi.com, scalesstore.uz, gl.uz, kz.atlascopco.com, htk.uz, mashimport.com, wilo.uz, grundfos.com, electrogear.ru, bsa.uz, cyfral.uz, servetechno.com, tinfiez.uz, winncom.com, valfex.uz, iiau.uz, tsdi.uz, tipme.net, tvdpi.uzpak.uz, htv.uz, kingsacademy.uz, mail.markaz.uz, esgroup.uz, oquvmarkazi.uz, ustudy.uz, vosiq.uz, tasulu.com, anico.hu, uz.g4s.com, tegen.uz, agmk.com, cru.ngmk.uz, sfs.uz, savu.uz, tb.uz, telecom.uz, mia.cov.in, abv.bg, emb.uz, taschkent.dipo.de, awex.co.uz, drreddys.com, itochu.uz, ramtashkent.uz, starprint.uz, trs.uz, bigideagroup.co.uk, plov-samsa.uz, tabaka.uz, lyabihauz.uz, navoiyazot.uz, ifoda.uz, astrachem.net, iin.uz, dts.uz, nv.uz, msa.uz, mirjalyuzi.uz, taxtplast.uz, bencom.be, oazis.uz, saxiyhamkor.uz, bmgroup.uz, begim.uz, sleepvip.com, vistatrans.net, tashkent.ahlers.com, cj-icm.com, tas.mscuzbekistan.com, primeshipping.com, yuniti.uz, euroimpex.uz, rl.uz, decoart.uz, capitaltrust.uz, superjob.uz, uzjobs.com и otsenka.uz

Впрочем, это количество составило всего 3% от общего числа адресов, и я осознанно пошёл на их исключение.

SMTP проверку не прошли 460 адресов электронной почты. Если поставить перед собой задачу — определение ТОП-10 самых популярных почтовых серверов для компаний из каталога Yellowpages.uz, то единоличным лидером окажется Mail.ru. Гистограмма ниже показывает долю активных/неактивных электронных почтовых адресов по соответствующим серверам.

Итоговый результат

Исследование выявило 824 (9,67%) не активных электронных почтовых адреса в базе каталога Yellowpages.uz.

Заключение

Результаты проделанной работы субъективны и, из-за введения некоторых упрощений, вряд ли могут претендовать на серьёзное исследование.

Мною двигало профессиональное любопытство, и я не намеревался навредить кому-либо. Собранные данные принадлежат Yellowpages.uz, поэтому не будут передаваться третьим лицам или использоваться в личных целях. В качестве жеста доброй воли, в письме к Yellowpages.uz, вышлю список найденных мною незначительных ошибок.

Так же у меня есть некоторые замечания и предложения как для Yellowpages.uz, так и для множества подобных проектов в Узбекистане.

Возможность беспрепятственного извлечения данных

Как бы не были визуально скрыты контакты от пользователей сайта, извлечь их спамерам не составит большого труда. Я прекрасно понимаю причину размещения почтовых адресов в теге разметки Schema.org, но не поддерживаю эту практику. На сайте olx.uz номер телефона показывается только при Ajax-запросе (хотя и это можно пройти, но уже сложнее). На мой взгляд это решение лучше.

Почти сутки, периодичностью в 1 минуту, скрипт-парсер извлекал данные с сайта Yellowpages.uz и не разу не прервался. Мне даже не пришлось его маскировать под браузер. Это говорит о том, что никакой защиты данных не было предусмотрено.

Формат добавления информации в каталог

Мне уже приходилось добавлять в каталог информацию о 2-х компаниях и каждый раз для этого заполнял шаблон Word-файла. Не сказать, что это сложно, но явно непрактично как для пользователей, так и для тех сотрудников Yellowpages.uz, кому приходится обрабатывать присланные данные.

Так же остаётся открытым вопрос проверки указанных почтовых электронных адресов. Самый эффективный способ — это автоматически высылать письмо-подтверждение, что очень удобно реализуется с электронными формами подачи заявок.

С приходом Яндекс.Справочника на наш рынок, вопрос степени актуальности информации встаёт остро. Для конкуренции с подобным гигантом уже недостаточно прежних заслуг. Необходимы инновации или, хотя бы, быть в тренде технологий. Описанные выше предложения не новы, но априори являются частью современных веб-приложений.

Предоставление услуг рассылки

Как показало поверхностное исследование данных каталога, доля активных почтовых адресов составляет 90,33%, что позволяет предоставлять качественные маркетинговые услуги. Эта ниша, практически, не занята на рынке Узбекистана и Yellowpages.uz, как и подобные проекты, имеет все шансы (я так думаю!) занять лидирующие позиции.



P.S.

5 сентября 2019 года встретился с представителями Yellowpages.uz. Они проявили заинтересованность к проделанной мною работе и хотели обсудить возможность сотрудничества, в целях улучшения их базы данных. Пришли к некоторым договорённостям, о которых напишу в одной из следующих статей.

Чуть выше я писал о том, что с таким высоким процентом актуальности базы данных, можно было бы предоставлять маркетинговые услуги. Как оказалось, они этим уже занимаются. Об этом я не знал, но и деталями процесса не интересовался.