Roundcube Fetchmail plugin - сбор почты с других почтовых ящиков

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

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Реклама ИП Скоромнов Д.А. ИНН 331403723315

Введение

Организовать сбор почты в ящики своего почтового сервера из других серверов можно разными способами. Из известных и бесплатных отмечу наиболее популярные инструменты:

  • Fetchmail
  • Imapsync
  • Getmail
  • Mbsync

Далее в статье я буду настраивать плагин к веб интерфейсу Roundcube, который для своей работы использует Fetchmail. Причём не в чистом виде, а с помощью скрипта, который берёт настройки для синхронизации ящиков из базы данных. Данный скрипт входит в состав панели управления почтовым сервером Postfixadmin, которую я обычно использую при настройке своих почтовых серверов.

Далее в статье я буду подразумевать, что вы используете почтовый сервер, настроенный по моей статье: Настройка Postfix + Dovecot + Postfixadmin + Roundcube + DKIM на Debian, либо схожей. Основная привязка тут будет к Roundcube и не столь критичная к Postfixadmin и ОС Debian. В других системах названия используемых пакетов могут отличаться, а если вы не используете Postfixadmin, то скрипт для работы плагина нужно будет скачать отдельно.

Установка Roundcube Fetchmail plugin

Для нормальной работы плагина нам необходимо установить некоторые пакеты в систему:

# apt install fetchmail liblockfile-simple-perl libsys-syslog-perl libunix-syslog-perl libdbd-mysql-perl

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

# cd ~
# git clone https://github.com/PF4Public/fetchmail

Переносим содержимое плагина в директорию с плагинами Roundcube. У меня это /var/www/webmail/plugins.

# mv fetchmail /var/www/webmail/plugins

Сразу же установлю права доступа на директорию с плагином таким образом, чтобы владельцем стал пользователь веб сервера, от которого он работает. У меня это веб сервер Angie и пользователь angie:

# chown -R angie:angie /var/www/webmail/plugins/fetchmail

В конфигурации Roundcube необходимо активировать новый плагин. Для этого добавляем в файл /var/www/webmail/config/config.inc.php в параметр $config['plugins'] название плагина. У меня в итоге с остальными плагинами этот параметр стал выглядеть вот так:

$config['plugins'] = ['acl', 'managesieve', 'userinfo', 'fetchmail'];

После этих настроек в веб интерфейсе Roundcube появится новый раздел настроек:

Roundcube Fetchmail plugin

Сам сборщик пока ещё работать не будет. Это только интерфейс управления.

Настройка Fetchmail plugin

Настройки плагина Fetchmail можно хранить в отдельной базе данных, но я не вижу в этом смысла, когда у нас уже есть база данных для Roundcube. Достаточно в ней создать ещё одну таблицу. В моём примере база данных имеет имя roundcube.

Параметры таблицы указаны в файле mysql.initial.sql, который лежит в директории SQL, в корне репозитория.

Структура таблицы для Fetchmail plugin

Там же корректирующие файлы, вносящие изменения в изначальную структуру: 2019122200.sql, 2022102000.sql, 2024010100.sql. Вам нужно будет выполнить команды из основного файла и трёх корректирующих в базе данных roundcube. Сделать это можно как через веб интерфейс, если у вас установлен phpmyadmin или любой другой клиент, так и в консоли mysql напрямую.

Покажу для краткости примеры из консоли mysql. Заходим в неё под учётной записью root и создаём отдельного пользователя для доступа к этой таблице. Можно использовать и существующего, но правильнее назначить для отдельной задачи своего пользователя. Это и более безопасно, и удобно для отладки.

# mysql -uroot -p 
> CREATE USER 'fetchmail'@'localhost' IDENTIFIED BY 'secret_password';
> GRANT ALL ON roundcube.fetchmail TO 'fetchmail'@'localhost';

Теперь выполняем SQL команды из перечисленных выше файлов:

mysql roundcube < /var/www/webmail/plugins/fetchmail/SQL/mysql.initial.sql
mysql roundcube < /var/www/webmail/plugins/fetchmail/SQL/mysql/2019122200.sql
mysql roundcube < /var/www/webmail/plugins/fetchmail/SQL/mysql/2022102000.sql
mysql roundcube < /var/www/webmail/plugins/fetchmail/SQL/mysql/2024010100.sql

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

Создание таблицы в mysql базе

Права доступа к таблице fetchmail

Настраиваем скрипт для сбора почты. У меня уже установлен Postfixadmin в директорию /var/www/html/postfixadmin/. Там же в папке ADDITIONS находится скрипт fetchmail.pl, который нас интересует. Если у вас нет этой панели, то можно скачать скрипт отдельно из репозитория Postfixadmin - https://github.com/postfixadmin/postfixadmin/blob/master/ADDITIONS/fetchmail.pl. Я для удобства скопировал этот скрипт в /mnt/mail/fetchmail.pl, где у меня хранится почтовый архив.

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

my $db_type = 'mysql';
our $db_host="127.0.0.1";
our $db_name="roundcube";
our $db_username="fetchmail";
our $db_password="secret_password";

И ещё один параметр поменяем под свою систему. В моём случае - Debian. Указываем для lockfile актуальную директорию /run:

our $run_dir="/run/fetchmail";

В вашей ОС путь для run может быть другой. Назначим указанной директории владельцем пользователя, под которым работает почтовый сервер. В моём случае это vmail.

# mkdir /run/fetchmail
# chown vmail:vmail /run/fetchmail

Делаем файл fetchmail.pl исполняемым:

# chmod +x /mnt/mail/fetchmail.pl

На этом настройка Fetchmail plugin для Roundcube закончена. Можно проверять работу.

Проверка сборщика почты

Для того, чтобы проверить работу плагина с Fetchmail, необходимо добавить хотя бы одно правило для сбора почты. Для этого идём в веб интерфейс Roundcube каким-нибудь пользователем и настраиваем правило сбора.

Переходим в раздел НастройкиСбор почтыСоздать и добавляем правило.

Создание правила для сбора почты с помощью fetchmail

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

После добавления правила, информация о нём появится в таблице базы данных.

Теперь можно проверить работу сборщика вручную. Для этого запустим файл fetchmail.pl от пользователя почтового сервера:

# sudo -u vmail /mnt/mail/fetchmail.pl

Если будут какие-то ошибки запуска, то увидите их тут же, в консоли. Лог работы скрипта можно посмотреть в почтовом логе /var/log/mail.log. У меня, к примеру, была ошибка с самоподписанным сертификатом почтового сервера. Fetchmail не хотел с ним работать. Пришлось выпустить и настроить подтверждённый сертификат.

Если всё в порядке, скрипт работает, письма собираются, то можно создавать задание на автоматическую проверку. Сделать это можно через cron.

# crontab -u vmail -e

Добавляем проверку раз в 5 минут. Можно и чаще, но если проверок будет много, то в минуту могут все не уложиться:

*/5 * * * * /mnt/mail/fetchmail.pl >/dev/null

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

Вот как в логах выглядит корректное получение нового письма через fetchmail:

Лог сбора почты с внешнего ящика

Оно приходит и обрабатывается как обычное входящее с отслеживанием реального отправителя. В ящике оно, соответственно, падает во Входящие:

Демонстрация работы сборщика писем в RoundCube

На этом всё, настройка закончена.

Заключение

Не могу сказать, что это очень удобный и изящный способ сбора почты. У меня не сразу всё заработало, отладка не очень удобная. Иногда задача fetchmail нормально отрабатывает, а результат видно только минуты через 3-4, а в логах пусто до этого. Не понятно, что вообще происходит. Подозреваю, что если задач будет много, то всё это будет работать ненадёжно.

Тем не менее, споcоб относительно простой в настройке. Не требует каких-то отдельных сервисов и сущностей. А самый главный плюс - пользователи сами могут настраивать свои ящики и не теребить по этому поводу администратора. Есть ещё один способ настройки сборщика - через Postfixadmin, но тогда пользователям ещё и туда нужно будет заходить, что не очень удобно. Лучше всё это настраивать через единый веб интерфейс почтового клиента Roundcube.

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

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

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Много интересного в канале автора в Telegram →
This is default text for notification bar