Электронная почта · 6 min read · Sep 08, 2025

Получение электронной почты с удаленных серверов с помощью fetchmail на Debian

Fetchmail — это программа для получения электронной почты с удаленных серверов. Представьте, что у вас есть пять учетных записей электронной почты на пяти разных серверах. Конечно, вы не хотите подключаться к каждому из них, чтобы получить свою почту. Здесь на помощь приходит fetchmail. Если у вас есть учетная запись пользователя на сервере Linux, вы можете заставить fetchmail загружать электронные письма с удаленных серверов и помещать их в один почтовый ящик (почтовый ящик вашего пользователя Linux), откуда вы можете получить их с помощью вашего почтового клиента (например, Thunderbird или Outlook).

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

1 Предварительная заметка

Вам нужен сервер Linux с системным пользователем, который может получать электронные письма, что означает, что на системе должен быть установлен MTA, такой как Postfix или Sendmail. В противном случае fetchmail не будет работать, потому что он пытается передать загруженные электронные письма MTA (Postfix, Sendmail и т. д.), а MTA доставляет письма в почтовый ящик пользователя (вы можете настроить систему так, чтобы она включала сканирование на спам и вирусы в этот процесс, например, с помощью amavisd-new или procmail, но это не охватывается в этом руководстве).

Я использую систему Debian в этом руководстве, где существуют два пользователя с именами falko и till.

2 Установка fetchmail

Чтобы установить fetchmail, все, что нам нужно сделать, это выполнить

apt install fetchmail

3 Настройка fetchmail

Существует два способа настройки fetchmail. Мы можем заставить его работать как демон с глобальным конфигурационным файлом или создать задание cron для запуска fetchmail вместе с конфигурационными файлами для каждого пользователя. Я опишу оба метода здесь.

3.1 Запуск fetchmail как демона с глобальным конфигурационным файлом

Чтобы заставить fetchmail работать как демон, нам нужно отредактировать /etc/default/fetchmail и установить START_DAEMON в yes:

nano /etc/default/fetchmail
# Этот файл будет использоваться для объявления некоторых переменных для fetchmail
#
# Уберите комментарий с следующей строки, если вы не хотите локализованных сообщений журнала
# export LC_ALL=C

# Объявите здесь, хотим ли мы запустить fetchmail. 'yes' или 'no'
START_DAEMON=yes

Далее мы должны создать конфигурационный файл /etc/fetchmailrc, потому что демон fetchmail не запустится, если этот файл не существует. В этом файле мы можем указать, как должен вести себя демон fetchmail, а также детали, которые fetchmail нужно знать для получения электронной почты с чужих учетных записей электронной почты.

Предположим, что у falko есть две учетные записи электронной почты, из которых мы хотим получить письма:

  • Первая учетная запись: сервер pop.someprovider.tld, протокол POP3, имя пользователя [email protected] (да, имя пользователя — это адрес электронной почты в этом случае), пароль secret.
  • Вторая учетная запись: сервер mail.otherprovider.tld, протокол POP3, имя пользователя ftimme, пароль verysecurepassword.

У till есть одна учетная запись электронной почты:

  • Сервер mailin.tillsprovider.tld, протокол POP3, имя пользователя tbrehm, пароль iwonttellyou.

Таким образом, наш файл /etc/fetchmailrc может выглядеть так:

nano /etc/fetchmailrc
# /etc/fetchmailrc для режима демона на уровне системы
# Этот файл должен иметь права 0600, владелец fetchmail

set daemon        300                # Проверять каждые 5 минут
set syslog                        # журналировать через syslog
set postmaster  root

set no bouncemail                # избежать потерь при ошибках 4xx
                                # с другой стороны, ошибки 5xx становятся
                                # более опасными...

##########################################################################
# Хосты для проверки
##########################################################################

# По умолчанию ===============================================================
# Установите antispam в -1, так как гораздо безопаснее использовать это вместе с
# no bouncemail
defaults:
timeout 300
antispam -1
batchlimit 100

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall
poll mailin.tillsprovider.tld protocol POP3 user "tbrehm" there with password "iwonttellyou" is till here keep

В начале файла у нас есть некоторые глобальные параметры, такие как set daemon 300 (что означает, что fetchmail должен получать электронные письма каждые 300 секунд), которые контролируют работу программы. Значения вышеуказанных параметров следующие:

  • set daemon: Установить интервал опроса в фоновом режиме в секундах.
  • set syslog: Выполнять ведение журнала ошибок через syslog.
  • set postmaster: Указать имя получателя последней инстанции (по умолчанию: пользователь, запускающий fetchmail, “postmaster”, если запущен пользователем root).
  • set no bouncemail: Направить ошибочные письма на локального постмастера (в соответствии с глобальным параметром “postmaster” выше).

Затем у нас есть параметры сервера и пользователя. Эти параметры идут вместе в строках, начинающихся с poll; если есть параметры, которые одинаковы для каждой строки опроса, мы также можем указать их перед строками опроса в разделе, который начинается с defaults: (таких как timeout, antispam и batchlimit в нашем примере).

  • timeout: Тайм-аут неактивности сервера в секундах (по умолчанию 300).
  • antispam: Указать, какие SMTP-ответы интерпретируются как блокировки по политике спама.
  • batchlimit: Указать максимальное количество сообщений, которые будут отправлены слушателю SMTP, прежде чем соединение будет намеренно разорвано и восстановлено (по умолчанию 0, что означает отсутствие ограничений).

Строки опроса говорят сами за себя; как вы видите, fetchmail получает электронные письма из обеих внешних учетных записей электронной почты falko и помещает их в один аккаунт.

Вы заметите, что строки опроса имеют разные окончания (например, nofetchall (по умолчанию), fetchall, keep, nokeep). Значения следующие:

  • nofetchall: Получать только новые сообщения (по умолчанию). Если ничего другого не указано (например, fetchall, keep), это означает nofetchall.
  • fetchall: Получать все сообщения, независимо от того, были ли они прочитаны или нет.
  • keep: Не удалять прочитанные сообщения с сервера.
  • nokeep: Удалять прочитанные сообщения с сервера.

Чтобы узнать больше обо всех доступных настройках конфигурации, посмотрите на

man fetchmail

/etc/fetchmailrc должен иметь права 600 и должен принадлежать пользователю fetchmail, поэтому мы выполняем следующее:

chmod 600 /etc/fetchmailrc  
chown fetchmail /etc/fetchmailrc

Наконец, мы можем запустить fetchmail:

/etc/init.d/fetchmail start

Fetchmail теперь должен загружать электронные письма и помещать их в почтовые ящики falko и till (используя MTA). Это будет повторяться каждые set daemon секунд.

3.2 Использование конфигурационных файлов для каждого пользователя и запуск fetchmail через Cron

Вместо использования глобального конфигурационного файла, как показано в главе 3.1, мы можем использовать конфигурационные файлы для каждого пользователя. Эти файлы должны иметь имя .fetchmailrc и находиться в домашнем каталоге пользователя.

Мы хотим создать такой файл для пользователя falko сейчас. Убедитесь, что вы вошли как falko, а не root! Затем мы делаем это:

cd ~/  
vi .fetchmailrc
set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret"
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" fetchall

Файл выглядит очень похоже на файл /etc/fetchmailrc из главы 3.1, однако вы заметите, что я больше не использую фразу is falko here (так как .fetchmailrc находится в домашнем каталоге falko, fetchmail знает, что письма должны быть доставлены falko). Конечно, вы все еще можете использовать is falko here, так что файл также может выглядеть так:

set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall

Чтобы узнать больше обо всех доступных настройках конфигурации, посмотрите на

man fetchmail

.fetchmailrc должен иметь права 600, чтобы только falko мог читать и записывать в него:

chmod 600 ~/.fetchmailrc

Вот и все. Теперь falko может запустить процесс получения, выполнив

fetchmail

или

fetchmail -v

что показывает, что происходит.

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

crontab -e

и создаем задание cron, подобное этому (которое будет запускать fetchmail каждые пять минут):

*/5 * * * * /usr/bin/fetchmail &> /dev/null

4 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.