Настройка сборщика почты Fetchmail + Procmail + Dovecot

Обновлено и опубликовано Опубликовано:

Используемые термины: FetchmailProcmailDovecot, IMAP, POP3.

Рассмотрим ситуацию, когда нужно забирать почту с mail.ru (для примера) и сохранять ее в локальный ящик на сервере Dovecot. Для этого мы настроим Fetchmail для сбора почты по IMAP, затем Procmail для локальной доставки почты в Dovecot. Для каждого пользователя (системного или виртуального) мы создадим свои конфигурационный файлы Fetchmail и Procmail.

Dovecot

Подразумевается, что у нас уже настроен Dovecot. В качестве формата хранения почты должен быть настроен Maildir. Для примера, каталог хранения почты будет /home/mail/dmosk.local/master@dmosk.local.

Если в Вашей системе нет настроенного Dovecot, можно воспользоваться инструкцией Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим.

Настройка почтового ящика для подключения по IMAP/POP3

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

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

Сбор почты с помощью fetchmail

Переходим к процессу сбора писем с удаленного почтового ящика. Устанавливаем fetchmail.

а) если используем систему RPM:

yum install fetchmail

б) если используем систему deb:

apt-get install fetchmail

После установки fetchmail открываем его конфигурационный файл:

vi /home/mail/dmosk.local/master@dmosk.local/fetchmail.conf

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

Приводим конфигурационный файл к виду:

set logfile /home/mail/dmosk.local/master@dmosk.local/fetchmail.log
set invisible
set no bouncemail

poll imap.mail.ru
port 993
proto IMAP
user "mail_user@mail.ru"
password "mail_user_password"
ssl
keep
mda "/usr/bin/procmail -m /home/mail/dmosk.local/master@dmosk.local/procmail.conf"

* где:

  • poll — имя сервера, к которому мы будем подключаться.
  • port — порт, по которому будет проходить соединение.
  • proto — протокол обмена почтой.
  • user — пользователь, под которым мы подключается к удаленному серверу.
  • password — пароль пользователя, под которым выполняем соединение.
  • keep — оставлять письма на удаленном почтовом сервере (если наоборот, необходимо удалять, задаем опцию nokeep).
  • mda — программа для локальной доставки сообщений до почтового ящика.

* в данном примере мы задаем файл для логов fetchmail.log (он будет располагаться в том же каталоге, что и файл fetchmail.conf); с помощью опции invisible говорим, чтобы fetchmail не выдавал своего присутствия (как будто письма приходят напрямую с удаленного почтового сервера); опция no bouncemail говорит о необходимости отправлять сообщения об ошибках постмастеру, а не отправителю; подключение будет выполняться с imap.mail.ru по безопасному (SSL) IMAP соединению (порту 993). Полученные письма будут передаваться программе procmail, которая будет выполнять транспорт на основе настроек из файла procmail.conf, находящегося в той же директории, что и сам fetchmail.conf.

Задаем следующие права на созданный файл:

chmod 700 /home/mail/dmosk.local/master@dmosk.local/fetchmail.conf

* в противном случае, fetchmail выдаст ошибку, что файл должен иметь права доступа не более -rwx------ (0700).

Запускаем fetchmail с нашими настройками:

fetchmail -v -f /home/mail/dmosk.local/master@dmosk.local/fetchmail.conf

Если все настроено верно, мы должны увидеть такие строки:

...
fetchmail: IMAP< A0002 OK LOGIN Completed.
...
fetchmail: IMAP< A0008 OK FETCH Completed.
...
procmail: Couldn't read "procmail.conf"
...

* первая строка говорит об успешной аутентификации на IMAP-сервере; вторая об окончании получения списка писем и их загрузки; третья строка выдает ошибку поиска конфигурационного файла для procmail — это нормально, так как мы его еще не настроили.

Доставка почты в локальный ящик с помощью procmail

Устанавливаем procmail.

а) на RPM:

yum install procmail

б) на deb:

apt-get install procmail

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

vi /home/mail/dmosk.local/master@dmosk.local/procmail.conf

MAILDIR="/home/mail/dmosk.local/master@dmosk.local/"
DEFAULT="/home/mail/dmosk.local/master@dmosk.local/"
LOGFILE="procmail.log"
VERBOSE=on

:0

где MAILDIR — каталог, в котором хранятся письма пользователя; DEFAULT — путь хранения почты, если procmail не смог применить ни одного правила (в нашем примере это тот же каталог, что и MAILDIR); LOGFILE — файл для лога; VERBOSE — подробный вывод информации в лог. Данная настройка говорит локальному доставщику сохранить письма в каталоге /home/mail/dmosk.local/master@dmosk.local.

Запуск сборщика

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

ls -ld /home/mail/dmosk.local/master@dmosk.local

Мы увидим что-то на подобие:

drwx------ 10 vmail vmail 4096 июл 11 14:10 /home/mail/dmosk.local/master@dmosk.local

... где vmail vmail — пользователь-владелец и группа-владелец каталога, в котором у меня хранится почта пользователя. В моем случае доступ разрешен пользователю vmail, от которого и нужно запускать сборщик почты.

Разовый запуск

Для запуска fetchmail заходим в систему под пользователем vmail (в вашем случае это может быть другой пользователь):

su - vmail

Запускаем наш сборщик:

$ fetchmail -v -f /home/mail/dmosk.local/master@dmosk.local/fetchmail.conf

* данная команда загрузить непрочтенные письма. Если нужно загрузить все письма (например, при первом запуске) используем опцию -a.

Проверяем, что он корректно отработал. В локальном почтовом ящике должны появиться письма, а в удаленном ящике письма должны отметиться как прочтенные (или удалиться, если мы не использовали опцию keep).

Выходим из командной консоли пользователя:

exit

Запуск по расписанию

Редактируем задания в cron:

crontab -u vmail -e

* мы запускаем редактирование cron от пользователя vmail.

Добавляем строку:

*/5 * * * * /bin/fetchmail -v -f /home/mail/dmosk.local/master@dmosk.local/fetchmail.conf

* в данном примере fetchmail будет запускаться каждые 5 минут.

# Серверы # Почта
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет