адреса сбора почты что это
Сборщик почты (делаем простые вещи сложно)
В качестве предисловия
Наверное, многие из вас в своей практике сталкивались с задачей сбора почты с ряда ящиков. Зачем это может быть нужно? Наверное, потому что это универсальный механизм обмена данными между системами. Множество библиотек под любые языки, реализующих SMTP, POP3, IMAP, готовые решения по реализации стэка сообщений (как я сложно назвал почтовый ящик. ) и т.д.
Неудивительно, что многие интеграционные задачи реализуются именно через почту. Тут в дело вступает некий сервис, который умеет эту почту быстро забирать, категоризировать и выполнять необходимые действия.
Кому достаточно приведенного ниже кода — дальше могут не читать:
Что будем делать
Сразу сделаем ряд допущений:
1) Собирать почту нужно для нескольких систем. Может в будущем ещё для нескольких. И ещё… В общем решение должно быть универсальное;
2) Почты возможно будет много — следует из пункта 1 (а иначе я бы не писал этот пост);
3) Почту придется парсить;
4) Все ящики сервисные — пользователи туда не лезут.
Что будем использовать
Система должна работать 24/7, поэтому реализуем её в виде Windows Service. Для этих целей предлагаю сразу использовать TopShelf.
Разумеется, всё должно быть распараллелено. Тут на сцену выходит моя любимая библиотека TPL DataFlow.
Забирать почту будем по POP3. Все «модные штучки» IMAP в данной задаче излишни — надо как можно быстрее и проще забрать исходник письма и удалить его на сервера. POP3 тут хватит за глаза. Используем OpenPop.NET.
Как уже говорилось, почту будем парсить. Может через Regex, может кастомные логики… мало ли что. Именно поэтому нужно гибко и быстро подпихивать новые правила с помощью плагинов. Тут нам поможет Managed Extensibility Framework.
В качестве факультатива прикрутим мониторинг в Zabbix. (Мы же собрались работать 24/7 и выдавать хваленую скорость — нужно следить за этим).
Поехали
Создаем обычное консольное приложение. Открываем NuGet консоль и ставим все нужные пакеты:
Переходим в папку проекта, создаем App.Debug.config и App.Release.config. Выгружаем проект из студии, открываем его код (Здесь и далее TopCrawler.csproj). В секцию с конфигом добавляем:
А ниже собственный таргет для MSBuild:
Лично я привык именно таким способом — по старинке — добавлять трансформацию конфигов для разделения сред.
Для удобства предлагаю strongly-type конфиги. Отдельный класс будет читать конфигурацию. (О теоретических аспектах такого решения можно пообщаться в комментах). Конфиги, логи, мониторинг — отличный повод реализовать паттерн Singleton.
Создаем в проекте одноименную папку (должен же быть порядок). Внутри создаем 3 класса — Config, Logger, Zabbix. Наш логгер:
Мониторинг с помощью Zabbix заслуживает отдельного поста, поэтому я просто оставлю тут класс, реализующий агента:
Конфиги… Пора уже делать хоть что-то интересное. Во-первых, в конфигах будем хранить ящики, которые мы опрашиваем. Во вторых настройки DataFlow. Предлагаю так:
Итак, хост и порт куда конектится, юзер и пароль — тут всё понятно. Дальше тип ящика. Допустим, служба используется маркетингом (как и другими отделами). У них есть ящики, куда сваливаются автоответы на рассылки, а также отчеты о спаме FBL. Сам ящик уже категоризирует письмо, поэтому для таких ситуаций сразу задаем тип ящика. С настройками DataFlow будет понятно дальше, когда начнем создавать объекты. Тут у нас будут собственные секции в конфиге. Мануалов куча как это сделать, поэтому просто покажу результат:
Полную реализацию конфига писать не буду, подразумевается, что в процессе разработки туда будут добавляться нужные нам параметры.
Наши кастомные настройки прочитаем так:
Как-то очень затянуто получается, а мы даже не дошли до самого интересного.
Опустим пока обвязку из TopShelf, счетчики производительности, общение с БД и перейдем к делу! Создаем класс Crawler — ядро. Для начала читаем почту:
Вот тут лень взяла свое и я решил не заморачиваться — если ящиков порядка 20-30 можно под каждый запустить таск и не париться о количестве потоков. (Разрешаю закидать помидорами.)
Переходим к самому чтению:
Сразу посчитаем тайминги доступа к ящику — пригодится для диагностики сети и загруженности сервера.
Отправляем данные в Zabbix. Всё просто — указываем имя хоста (как оно заведено в Zabbix), ключ (опять таки строго, как в Zabbix) и строковое значение.
DataFlow pipeline будет создана при создании класса Crawler. Считаем, что наш первый этап — отсортировать письмо.
Видите, как просто — сам конвейер один. Все таски, читающие почту, кидают туда сообщения по одному. Если блок занят, Post вернет false и мы просто подождем пока он не освободится. Текущий потом в это время продолжает работать. Вот это я называю параллелизм без забот.
Сообщение ушло на конвейер, теперь его можно со спокойной душой сохранить в RAW архив (да-да! всё, что читаем — сохраняем в файловый архив. Служба поддержки нам потом скажет спасибо).
Настроим, например, ротацию архива:
Потом на него можно натравить logStash, но это уже другая история…
Здесь мы использовали статические счетчики ошибок (в разрезе типов ящиков), где ErrorsCounters — это:
А сами счетчики можно сделать так:
Перейдем к созданию конвейера. Допустим, у нас есть ящики, куда сыпятся автоответы. Такие письма надо распарсить (что за автоответ, от кого, по какой рассылке и т.д.) и сложить результат в хранилище (БД). Допустим, есть ящики, куда падают FBL отчеты. Такие письма сразу складываем в базу. Все прочие письма считаем «полезными» — их надо проверить на спам и отправить во внешнюю систему, например, CRM.
Как вы уже поняли, данный пример в основном рассматривает применение сборщика для задач маркетинга — сбор статистики по доставке почты, информация о спаме.
Итак, мы определились с рабочим потоком. Объявляем необходимые блоки в классе Crawler:
Создаем метод инициализации и создаем блоки конвейера (для инициализации блоков используем наши замечательные секции из конфигов):
Собираем конвейер в соответствии с нашей схемой:
Как видим, всё предельно просто — связываем блок со следующим (с возможностью задания условия связи). Все блоки исполняются параллельно. Каждый блок имеет степень параллелизма и емкость (с помощью емкости можно регулировать очередь перед блоком, то есть блок сообщение принял, но еще не обрабатывает). Таким образом, можно задавать высокую степень параллелизма для «сложных» и долгих операций, как, например, парсинг содержимого письма.
Не буду описывать матчасть DataFlow, лучше всё прочесть в первоисточнике TPL DataFlow.
Далее задаем правила выхода из блока:
Всё, на самом деле конвейер уже работает, можно постить в него сообщения. Осталось только остановить его дополнив наш метод Start:
Переходим к делегатам.
Сортировка… Ну, допустим у нас всё просто (усложнить то всегда успеем):
Спам фильтр. Это на домашнюю работу — используйте SpamAssassin.
Вот вам делегат:
И классы для работы с API SpamAssassin (ссылка на проект).
А мы переходим к парсингу писем. Парсим мы автоответы. Тут вступает в дело MEF.
Создаем проект (dll) с интерфейсами для наших плагинов (Назовем Interfaces).
Добавляем интерфейс:
И… всё. Наш TopCrawler зависит от этого проекта и проект с плагинами тоже будет использовать его.
Создаем новый проект (тоже dll), назовем Conditions.
Добавим типы автоответов:
И классы, реализующие наш интерфейс:
Как вы заметилиб всё дело в атрибутах. С помощью них плагины и будут загружены.
Возвращаемся к нашему проекту и загружаем плагины:
LoadPlugins дергаем в конструкторе нашего класса. Объяснять подробно про механизм загрузки не буду — гугл справится лучше.
Переходим к нашему делегату проверки типа Bounce. Условия будут применяться по очереди, пока не сработает первое — исключающий метод:
Таким образомб если появляется новая логикаб достаточно просто добавить в проект с плагинами новый класс, реализующий наш интерфейс и — вуаля! Пример второго плагина по определению отправителя письма прикладывать не буду — итак уже длинный пост (Автоответ сгенерировал сам сервер, поэтому отправителя тоже надо распарсить из заголовков письма).
С записью результатов в БД тоже ничего необычного. Например, так:
Простите, что не успел показать TopShelf — пост и так уже слишком раздулся.
Выводы
В этом уроке мы узнали, что задача сбора почты может оказаться не такой простой. Разработанное ядро позволяет быстро добавлять новые шаги процесса — DataFlow-блоки, не затрагивая существующую логику. Подсистема плагинов позволяет быстро наращивать скриптоподобную логику парсинга, а сам DataFlow распараллеливает все вычисления (причем мы имеем возможность гибко настраивать многопоточность под конкретную машину). TopShelf дает нам возможность запускать сервис как в режиме службы, так и в консольном режиме для облегчения отладки.
Фух… Если будет интересно, дальше расскажу, как поставить это на рельсы Continious Integration, настроить автобилды и выпуск релиза через VS Release Management.
Что такое парсер email-адресов и когда есть смысл его использовать
Блочный редактор писем, готовые шаблоны email, формы подписки и автоматизация. Запускайте email-рассылки, чтобы быть на связи со своими клиентами.
Где взять базу? Как сделать красивое письмо? Какие показатели смотреть? Расскажем об этом в бесплатном курсе из 16 писем. Татуировка в каждом письме!
Рассказываем про инструменты для email-рассылок. Обсуждаем лучшие примеры и механики. Говорим о деньгах. Публикуем вакансии.
Для запуска любой email-рассылки необходима база подписчиков. Чтобы собрать электронные адреса, можно пойти стандартным путём — вовлекать аудиторию в общение, рассказывать о потенциальной пользе, собирать контакты в обмен на что-то ценное. А можно использовать граббер email-адресов (парсер), который в кратчайшие сроки соберёт десятки тысяч контактов потенциальных подписчиков.
Парсер выглядит простым вариантом, но на деле все совсем непросто — особенно, если вы захотите собрать email-адреса.
Что такое парсинг
Представьте, что пользователь посещает различные сайты, копирует с них данные и сортирует их с учётом нужных критериев. Так работает парсинг, только вместо пользователей по сайтам ходят специальные роботы. Сервис-парсер обращается к страницам целевого сайта, получает HTML-код, ищет в нём нужные данные и сохраняет их в собственной базе.
Парсить можно самые разные данные. Например, можно собирать телефоны, прайсы, каталоги товаров, структуру сайтов и многое другое. В том числе можно парсить email-адреса. Для этого в настройках сервиса (или в скрипте) указывают параметры отслеживания — элементы, составляющие электронный адрес («@», «email»). Как только парсер находит совпадения, он отправляет данные в базу. По итогам парсинга пользователь получает список, состоящий из URL сайтов и собранных email.
Преимущества парсинга очевидны:
Применение парсинга выглядит очень удобным. Но вот с законностью есть проблемы.
Почему в большинстве случаев парсинг — не вариант
В ФЗ №149 «Об информации…» сказано, что «К общедоступной информации относятся общеизвестные сведения и иная информация, доступ к которой не ограничен». Поскольку в большинстве случаев парсер собирает открытые данные, опубликованные в общем доступе, это не запрещено законом. Но есть нюансы. Парсинг признают легальным инструментом, если он не нарушает какой-либо закон. Рассмотрим, причиной каких нарушений может стать парсинг.
Нарушение авторских и смежных прав
У любого контента в интернете есть автор или правообладатель, даже если это не указано в подписи к материалу. Нормы об авторском праве в некоторых случаях позволяют использовать чужой контент без разрешения владельца: при использовании цитирования, в информационных или образовательных целях. Однако если авторские произведения используют с целью получения дохода, видоизменяют либо присваивают авторство — это признают нарушением авторских прав. Нарушителя ждёт административный штраф.
Например, нельзя парсить чужой контент и публиковать его от своего имени — это нарушение авторских прав.
Вывод
Парсинг любой информации для получения коммерческой выгоды запрещён.
Неправомерный доступ к компьютерной информации
Закон запрещает неправомерный доступ к информации, если это повлекло за собой уничтожение, блокировку, изменение или копирование сведений. Нарушителя могут оштрафовать, отправить на, исправительные или принудительные работы или лишить свободы.
Если даже парсинг никак не влияет на контент, парсер в любом случае копирует информацию. Не понятно, что понимать под неправомерным доступом. Можно предположить, что это любая попытка неавторизованного входа, когда доступ к информации ограничен, защищён или запрещён. Например, для использования сайта требуется регистрация пользователя. К незаконным методам можно отнести и обход технической блокировки парсинга.
Вывод
Нельзя парсить данные, доступ к которым требует дополнительных действий со стороны пользователя. То есть, запрещено обходить блокировку парсинга, взламывать пароли, получать доступ к закрытым сведениям.
Использование гражданских прав для ограничения конкуренции
В законе есть такое понятие, как злоупотребление правом. Например, любой пользователь имеет право пользоваться общедоступной информацией, но только если это не вредит другим лицам. Кроме того, запрещено использовать гражданские права с целью навредить конкурентам.
Получается, что если парсинг причиняет вред конкурентам, это незаконно. Пострадавшее лицо может потребовать возместить убытки. К примеру, парсер собирает закрытые базы данных конкурирующих организаций, чтобы использовать их для обхода конкурентов.
Вывод
Нельзя использовать парсинг с целью навредить конкурентам или обрести доминирующее положение на рынке благодаря определённым сведениям.
Разглашение коммерческой тайны
Запрещено собирать сведения, которые представляют коммерческую тайну. За это могут оштрафовать, отправить на исправительные или принудительные работы и даже лишить свободы. При разглашении или использовании коммерческих сведений без согласия владельца наказание увеличивают.
Коммерческой тайной могут быть списки клиентов и поставщиков, методы сбыта, исходные коды и прочее. Основные критерии — ограниченный доступ и получение экономической выгоды от использования данных.
Вывод
Запрещено применять парсинг для доступа к закрытой коммерческой информации, даже если впоследствии эта информация не будет использована.
Незаконное обращение с персональными данными
Без разрешения владельца нельзя собирать, обрабатывать и использовать персональные данные. Причём не имеет значения то, что человек сам разместил свои данные в открытом доступе. Это не делает их общедоступными.
При парсинге бывает сложно определить, что можно считать персональными данными. По закону это любая информация, которая прямо или косвенно относится к определяемому физическому лицу. При этом не существуют унифицированного перечня видов данных. К персональной информации можно отнести любые сведения, которые позволяют идентифицировать человека.
Например, парсер собирает телефоны пользователей без ФИО. Но каждый номер закреплён за человеком по договору с оператором. Теоретически пользователя можно идентифицировать и телефонные номера можно признать персональными данными.
Вывод
Нельзя парсить персональные данные.
Приведу несколько ситуаций, в которых парсинг не запрещен и может быть полезен владельцам сайтов и маркетологам:
Можно ли парсить и использовать email-адреса
Получается, что, парсинг законом разрешён как инструмент. Но имеет значение, что именно парсить и для каких целей.
Какие email-адреса можно парсить
Не всегда ясно, можно ли признать email-адреса персональной информацией. Сам по себе адрес электронной почты — это обезличенный набор букв и цифр. По нему сложно определить конкретного владельца. Например, mir1234@gmail.com или qwerty@mail.ru. Такие адреса нельзя считать персональными данными и, соответственно, их можно парсить.
А вот если вместе с теми же адресами парсят ФИО владельцев, то это уже незаконный сбор персональных данных. Пример: Иван Иванов — mir1234@gmail.com, Маша Петрова — qwerty@mail.ru.
Адреса электронной почты могут стать персональными данными, если в них есть информация, которая помогает идентифицировать человека: имя, фамилия, отчество, город проживания, год рождения. К примеру, olegsidorov@gmail.com, kotow15031994@yandex.ru. Парсинг таких адресов будет нарушением закона.
Ещё один нюанс в принадлежности email. В законе о персональных данных говорится о принадлежности информации физическому лицу. Соответственно, если электронный адрес принадлежит юридическому лицу, то он не признаётся персональной информацией.
То есть, если с помощью граббера собирают email-адреса компаний, даже в сочетании с названиями организаций, это не считается нарушением закона. Исключение — парсинг списков email-адресов организаций, которые составляют коммерческую тайну и/или защищены от несанкционированного доступа.
Как настроить сбор почты на Яндекс с любых других ящиков?
В прошлый раз я начал серию статей о сборе почты с нескольких различных ящиков, созданных даже на разных сервисах, в один основной ящик, который пользователь постоянно контролирует и ему проще работать только с ним одним, нежели чем отдельно просматривать все свои электронные ящики. Подробнее о необходимости сбора почты и о её реализации на сервисе GMail, читайте вот здесь.
Эту серию статей я планирую пока что на 3 статьи. Сегодня расскажу о настройке сбора почты в не менее известном почтовом сервисе — Яндекс.
Сбор почты с других аккаунтов в Яндекс настраивается так же просто как и в других сервисах.
Процесс настройки сбора почты в сервисе Яндекс.
Чтобы подключить возможность собирать всю почту в ваш ящик на Яндекс с любых ваших аккаунтов на этом же или других почтовых сервисах в первую очередь войдите в свой аккаунт на Яндекс, который будет являться основным. Именно в него будете собирать почту с других ящиков.
Откройте раздел настроек почты и выберите “Сбор почты с других ящиков”.
Собирать почту вы можете с любых ящиков, расположенных на любых почтовых сервисах, а не только с ваших почт, расположенных на том же сервисе Яндекс!
В примере для этой статьи будет показан процесс сбора писем с почты Mail.ru.
Введите полный адрес электронной почты, откуда будете собирать письма и пароль от неё, после чего нажмите “Включить сборщик”.
Если вы указали верные логин и пароль от почты, то в следующем окне появится сообщение об успешном соединении и здесь можно произвести некоторые настройки сбора писем. К примеру, вы можете присвоить собираемым письмам метку, а также отображать старые пересылаемые письма как прочтённые. Отметьте нужные вам опции после чего внизу укажите ещё раз пароль [1] от вашей второй почты и нажмите “Сохранить изменения” [2]. Почта начнёт собираться минут через 10.
В этом окне настроек у вас не получится выбрать отдельную папку для сбора писем с подключённого ящика. Изначально будет указана папка “Входящие” и она не меняется. Это связано с тем, что изначально почта собирается по протоколу IMAP и этот протокол копирует полностью структуру папок с подключенной вами почты.
Если 2 варианта заставить всё-таки собираемую почту сортироваться по папкам:
Изменить настройки сбора почты и поставить протокол POP3, вместо IMAP (который задаётся изначально);
Настроить позже фильтрацию писем, т. е. создать условие, при котором получаемая почта будет попадать в нужную вам папку, минуя “Входящие”.
Второй вариант, думаю, более предпочтителен, особенно для новичков, чтобы не ковыряться в настройках соединения с другой почтой.
Теперь все письма, поступающие на подключённую вами почту, будут стекаться в текущую, которая является вашей основной. И тогда уже нет надобности заходить отдельно во вторую почту для проверки новых писем в ней.
Как посмотреть отдельно все письма, собираемые из подключенной почты?
После добавления почты, вы увидите ярлык с её названием слева под папками для писем. Пример:
Кликнув по этому ярлыку вы увидите отдельно все письма из подключённого ящика.
Как изменить настройки или отключить сбор почты с определённого ящика?
Если вам нужно что-либо поменять в настройках сбора почты из добавленного ящика, то вы можете это сделать там же в настройках почты Яндекса, через раздел “Сбор почты с других ящиков”.
Если нужно выключить или снова включить сбор почты с определённого подключённого ящика, нажмите на переключатель “Вкл. / Выкл.” [1] в списке подключённых ящиков.
Если нужно открыть настройки сбора почты, кликните по названию ящика [2], после чего кликните по появившейся ссылке “Настроить”. В результате откроется такое же окно настроек, как при подключении почты (см.выше).
Заключение.
В заключение хочу отметить, что обычно со сбором электронной почты в сервис Яндекс проблем никаких нет и ничего не нужно настраивать во второй почте (которую подключаете). Но есть очень капризный сервис по имени GMail 🙂 Вот при его подключении (причём не только к Яндекс, но к даже к самому себе) очень часто возникают проблемы и связано это с повышенной безопасностью этой гугловской почты. Нет, не спорю, безопасность — это хорошо! Но иногда это достигает уровня маразма, например, когда Gmail блокирует подключение к своему же второму ящику GMail, причём вход в оба выполнен с одного компьютера и одного IP :)) О подобных проблемах именно с подключением почт Google я расскажу в отдельной статье.
Сделай репост – выиграй ноутбук!
Каждый месяц 1 числа iBook.pro разыгрывает подарки.
—> LENOVO или HP от 40-50 т.р., 8-16ГБ DDR4, SSD, экран 15.6″, Windows 10
Настройка сборщика почты в яндексе
Шаг 1
Для того, чтобы настроить сбор почты со стороннего почтового ящика требуется зайти в почтовый ящик, в котором будет настроен сборщик. Далее кликните по кнопке «Настройка» (находится в верхнем правом углу).
Шаг 2
Шаг 3
В открывшейся странице требуется заполнить поля для настройки сбора почты.
Пункт «Забирать почту из ящика»
В поле «E-mail» введите полностью имя почтового ящика, с которого будет забираться письма, в поле «Пароль» соответствующий пароль для этого ящика.
Пункт «параметры вашего почтового сервера»
в поле «логин» введите тоже значение, что и в поле «E-mail», то есть имя почтового ящика,
в поле «Сервер» введите pop3.megagroup.ru (в случае, если почтовый ящик располагается на почтовом сервере Megagroup.ru),
в поле «Порт» введите значение 110.
Далее кликните по кнопке «Включить сборщик».
Обратите внимание, регистр символов очень важен! Поэтому адрес электронной почты, нужно вводить маленькими буквами. Особенно важно соблюдать регистр, при вводе пароля. Если в пароле, (например: a8sH3mH0f) имеются большие буквы, то написание маленькими буквами (например: a8sh3mh0f) недопустимо!
Шаг 4
Шаг 5
После этого у Вас должна открыться страница, на которой будет отображаться подключенный почтовый ящик.
Мы занимаемся разработкой веб-сайтов для России и зарубежных рынков с 1997 года. Наша команда – более пятисот сотрудников в разных странах и городах.
Понимание потребностей онлайн-бизнеса, опыт взаимодействия с тысячами клиентов, высокая квалификация персонала, собственные «ноу-хау» и хороший объём заказов позволяют веб-студии Мегагрупп.ру предлагать услуги высокого качества по удивительно низким и «вкусным» ценам.