Как объединить все почты в одну на компьютере

Обновлено: 06.07.2024

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

Кому достаточно приведенного ниже кода — дальше могут не читать:

Что будем делать

Сразу сделаем ряд допущений:
1) Собирать почту нужно для нескольких систем. Может в будущем ещё для нескольких. И ещё… В общем решение должно быть универсальное;
2) Почты возможно будет много — следует из пункта 1 (а иначе я бы не писал этот пост);
3) Почту придется парсить;
4) Все ящики сервисные — пользователи туда не лезут.

Что будем использовать

Система должна работать 24/7, поэтому реализуем её в виде Windows Service. Для этих целей предлагаю сразу использовать TopShelf.

Разумеется, всё должно быть распараллелено. Тут на сцену выходит моя любимая библиотека TPL DataFlow.

Как уже говорилось, почту будем парсить. Может через Regex, может кастомные логики… мало ли что. Именно поэтому нужно гибко и быстро подпихивать новые правила с помощью плагинов. Тут нам поможет Managed Extensibility Framework.

Логи пишем через NLog.

В качестве факультатива прикрутим мониторинг в 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. Считаем, что наш первый этап — отсортировать письмо.

Настроим, например, ротацию архива:

Потом на него можно натравить logStash, но это уже другая история…


Здесь мы использовали статические счетчики ошибок (в разрезе типов ящиков), где ErrorsCounters — это:


А сами счетчики можно сделать так:

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

Итак, мы определились с рабочим потоком. Объявляем необходимые блоки в классе Crawler:


Создаем метод инициализации и создаем блоки конвейера (для инициализации блоков используем наши замечательные секции из конфигов):


Собираем конвейер в соответствии с нашей схемой:

Не буду описывать матчасть DataFlow, лучше всё прочесть в первоисточнике TPL DataFlow.

Далее задаем правила выхода из блока:

Переходим к делегатам.
Сортировка… Ну, допустим у нас всё просто (усложнить то всегда успеем):


Спам фильтр. Это на домашнюю работу — используйте SpamAssassin.
Вот вам делегат:


И классы для работы с API SpamAssassin (ссылка на проект).
А мы переходим к парсингу писем. Парсим мы автоответы. Тут вступает в дело MEF.
Создаем проект (dll) с интерфейсами для наших плагинов (Назовем Interfaces).
Добавляем интерфейс:


И классы, реализующие наш интерфейс:


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


LoadPlugins дергаем в конструкторе нашего класса. Объяснять подробно про механизм загрузки не буду — гугл справится лучше.

Переходим к нашему делегату проверки типа Bounce. Условия будут применяться по очереди, пока не сработает первое — исключающий метод:


Таким образомб если появляется новая логикаб достаточно просто добавить в проект с плагинами новый класс, реализующий наш интерфейс и — вуаля! Пример второго плагина по определению отправителя письма прикладывать не буду — итак уже длинный пост (Автоответ сгенерировал сам сервер, поэтому отправителя тоже надо распарсить из заголовков письма).

С записью результатов в БД тоже ничего необычного. Например, так:

Простите, что не успел показать TopShelf — пост и так уже слишком раздулся.

Выводы

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

Фух… Если будет интересно, дальше расскажу, как поставить это на рельсы Continious Integration, настроить автобилды и выпуск релиза через VS Release Management.

Причины по которым может потребоваться настроить сбор почты в один из ваших почтовых ящиков:

Инструкции по настройке сбора почты на яндексе, на gmail и на mail ru

В популярных почтовых сервисах Рунета настройка сбора почты примерно одинаковая.

Рассмотрим как настроить сбор почты на яндексе, на gmail и на mail ru, поэтому если вам станет понятен принцип настройки на одном сервисе, то и в любом другом, вам будет легко собрать все письма в нужный вам ящик и настроить авто-сборщик.

Сбор почты на Яндексе

Чтобы увеличить картинку - нажмите на нее

1 ШАГ

Сначала нам нужно попасть в раздел Настроек.

Для этого наведите курсор мыши на список папок в левом столбце.

Под последней папкой появится ссылка Настроить.

Так мы попадем на страницу настроек папок, но еще не в главный раздел Настроек (см. рис 1.)

Сбор почты на Яндексе - Шаг 1

2 ШАГ

Далее нужно нажать на ссылку Все Настройки (см. рис 2.). Пока это самый короткий путь чтобы попасть в Главный раздел Настроек.

Сбор почты на Яндексе - настройка Шаг 2

3 ШАГ

Теперь нам нужно выбрать подраздел "Сбор почты с других ящиков" (см. рис 3.)

Сбор почты на Яндексе - настройка Шаг 3

4 ШАГ

Мы оказались на странице добавления почтовых ящиков для сбора.

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

Введите в пустые поля Почту и Пароль от нее и нажмите "Включить сборщик"

Сбор почты на Яндексе - настройка Шаг 4

5 ШАГ

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

Сбор почты на Яндексе - настройка Шаг 5

Сбор почты на Gmail

1 ШАГ

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

В раскрывшемся меню нажмите на пункт меню - Настройки.

Сбор почты на Gmail - настройка Шаг 1

2 ШАГ

На странице Настроек почты Gmail, перейдите на вкладку "Аккаунты и Импорт" и найдите раздел "Получать почту из других аккаунтов" .

Нажмите на ссылку "Добавить почтовый аккаунт". Должно появиться всплывающее окно в котором, мы продолжим настройку.

Сбор почты на Gmail - настройка Шаг 2

3 ШАГ

Введите адрес почты для сборщика и нажмите Далее.

Сбор почты на Gmail - настройка Шаг 3

4 ШАГ

На этой странице нам нужно выбрать "Импортировать письма из другого аккаунта".

Сбор почты на Gmail - настройка Шаг 4

5 ШАГ

На последнем этапе нам достаточно ввести пароль и нажать кнопку "Добавить аккаунт". Однако, стоит обратить внимание на дополнительные настройки, начиная с пункта "Сохранять полученные письма на сервере". Проставьте галочки напротив тех пунктов, которые вы хотите активировать. Можете следовать моим рекомендациям (отметил слева, красным)

Использование Gmail для пересылки электронной почты

Во вторичной учетной записи Gmail нажмите значок шестеренки справа и выберите Настройки.

Найдите настройки Gmail.

Перейдите на вкладку Пересылка и POP/IMAP и найдите настройки Пересылки.

Найдите вкладку Пересылка.

Нажмите Добавить адрес пересылки и введите основной адрес электронной почты. Нажмите Продолжить, чтобы продолжить.

Введите адрес электронной почты, на который будет отправлено перенаправленное письмо.

Gmail отправит электронное письмо с подтверждением на указанный основной адрес электронной почты.

Нажмите Продолжить, чтобы продолжить.

Совет: Если ваш основной адрес электронной почты также является учетной записью Gmail, войдите в систему, щелкнув изображение пользователя в правом верхнем углу окна Gmail и выбрав Добавить учетную запись. Таким образом, подключение двух учетных записей позволит вам быстро переключаться между учетными записями в процессе подтверждения без входа и выхода.

Подключите две учетные записи Gmail, чтобы упростить переключение почтовых ящиков.

В электронном письме с подтверждением вы найдете код подтверждения и подтверждающую ссылку. Введите код подтверждения на вкладке Пересылка и POP/IMAP во вторичной учетной записи Gmail или нажмите ссылку подтверждения в письме. Вторичная учетная запись Gmail пересылает основной адрес электронной почты.

Введите код или нажмите ссылку, чтобы завершить процесс пересылки.

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

В Gmail нажмите значок шестеренки вправо и выберите Настройки. Перейдите на вкладку Учетные записи и импорт.

Gmail позволяет отправлять электронную почту как другую учетную запись.

Введите дополнительный адрес электронной почты. Вы также можете отредактировать отображаемое имя и указать другой ответ на адрес.

Отправьте письмо с подтверждением.

Введите код подтверждения в окне Проверка в Gmail или нажмите ссылку подтверждения в письме.

Введите код или нажмите ссылку.

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

Установка адреса отправки почты по умолчанию

В этом случае имеет смысл установить другой адрес электронной почты в качестве адреса электронной почты по умолчанию в Gmail.

Снова щелкните значок шестеренки справа от окна Gmail и выберите Настройки. Перейдите на вкладку Учетные записи и импорт. Здесь перечислены все адреса электронной почты, с которыми вы можете отправлять электронную почту в Gmail.

Все ваши подключенные электронные адреса будут перечислены.

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

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

Организовать отправку электронной почты на разные адреса

Щелкните значок шестеренки справа от окна Gmail и выберите Настройки. На этот раз выберите вкладку Фильтры.

Выберите Создать новый фильтр в нижней части окна.

Создайте новый фильтр в настройках.

Есть много вариантов для вашего фильтра, но для этого урока вам нужно только заполнить одно из полей. В поле Кому введите дополнительный адрес электронной почты, который перенаправляется в основную учетную запись Gmail. Нажмите Создать фильтр с помощью этого поиска.

Создайте новый ярлык.

Введите имя для вашей метки и нажмите Создать.

Заключение

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

collector

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

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

Здесь много неудобств: есть риск забыть пароль, продолжает раздражать адрес klubnichkapupsik1234@, когда ты — директор серьёзной компании, да и много еще чего!

Решение есть и оно очень простое. И удобное.

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

Сборщик экономит время на переключение с ящика на ящик и позволяет полностью перейти на новый адрес без страха, что кто-то останется без ответа.

Как настроить?

Опять же. Все очень просто. Рассказываем:

  1. Зайдите в настройки вашего почтового ящика;
  2. Выберите раздел «Почта из других ящиков»;
  3. Введите электронный адрес и пароль от ящика, с которого хотите собирать письма.

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

example

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

Полезный совет!

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

Читайте также: