Электронная почта · 4 min read · Jan 01, 2026

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

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

Версия 1.1
Автор: Фалко Тимме

Getmail — это программа для получения электронной почты с удаленных серверов; она очень похожа на fetchmail, но более гибкая. Например, ее можно настроить для доставки писем непосредственно в почтовый ящик Maildir или mbox без необходимости в MTA, таком как Postfix, но, конечно, она также может передавать письма через MTA, если вы хотите. Getmail может использовать так называемые фильтры, такие как SpamAssassin и ClamAV, для сканирования писем, и вы даже можете указать getmail удалять письма на оригинальном сервере только после определенного количества дней.

Я не даю никаких гарантий, что это будет работать для вас!

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

Я тестировал getmail на системе Debian Etch с локальным пользователем по имени фалко, у которого есть локальный адрес электронной почты [email protected].

2 Установка getmail

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

apt-get install getmail4

как root.

3 Настройка getmail

Getmail можно настроить через конфигурационные файлы для каждого пользователя, и getmail затем может быть запущен этим пользователем. Чтобы сделать так, чтобы getmail запускался автоматически, мы можем создать задачу cron для этого пользователя.

В этой главе я предполагаю, что вы вошли в систему как пользователь фалко, а не root!

Getmail ищет конфигурационный файл ~/.getmail/getmailrc, поэтому сначала мы должны создать каталог ~/.getmail с правами 0700:

mkdir -m 0700 ~/.getmail

Затем мы создаем конфигурационный файл ~/.getmail/getmailrc. Файл getmailrc должен содержать как минимум один раздел [retriever] и один раздел [destination].

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Maildir path = ~/Maildir/ |

Вышеуказанный пример предполагает, что фалко имеет почтовый аккаунт с именем пользователя [email protected] и паролем secret на сервере pop.someprovider.tld, и что у него есть аккаунт Maildir на этом сервере, где ~/Maildir/ является его каталогом Maildir.

Этого уже достаточно, чтобы настроить getmail. Фалко теперь может получать электронные письма с удаленного сервера, просто запустив

getmail

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

crontab -e

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

| */5 * * * * /usr/bin/getmail &> /dev/null |

Теперь предположим, что у фалко нет аккаунта Maildir, а есть аккаунт mbox на этом сервере (/var/mail/falko). Все, что нам нужно сделать, это изменить раздел [destination] в ~/.getmail/getmailrc, например, так:

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Mboxrd path = /var/mail/falko |

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

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-i", "-bm", "[email protected]") unixfrom = true |

(Как вы видите, мы говорим getmail, что локальный адрес электронной почты фалко — это [email protected].)

Ключ -i в строке аргументов важен (спасибо Крису Мулсу за подсказку):

*Проблема в том, что некоторые письма, когда они доставляются в sendmail, будут обрезаны. Это может произойти, когда тело сообщения, извлеченного из источника, содержит строку с одной точкой (.). В SMTP это используется для обозначения конца сообщения. При вызове sendmail из командной строки по умолчанию сообщение заканчивается на EOF или на одной точке.

Цитата из страницы man sendmail Postfix:

По умолчанию Postfix sendmail(1) читает сообщение из стандартного ввода до EOF или до тех пор, пока не прочитает строку, содержащую только символ . и организует доставку.

Цитата из страницы man sendmail:

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

Я получал уведомления от клиентов, что иногда их электронная почта была ‘повреждена’, ‘пропала’ или ‘обрезана’. После просмотра сообщений на нашем сервере и того, что было в их почтовой системе, стало ясно, что возникла проблема.

Небольшое исследование показало, что локальный sendmail нужно вызывать с опцией ‘-i’:

Цитата из страницы man sendmail Postfix:

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

Это заставляет sendmail ждать до конца файла, пока сообщение не будет отправлено.*

Вы можете протестировать ключ -i с электронной почтой, подобной следующей:

``

Четыре: …. Три: … Два: .. Один: .


#### 3.1 Опции Мы также можем добавить раздел [options] в ~/.getmail/getmailrc, где мы можем изменить поведение getmail по умолчанию, например, так: vi ~/.getmail/getmailrc | ``` [...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true ``` | Вышеуказанные опции говорят getmail выводить сообщения о полученных сообщениях, получать только новые сообщения, удалять сообщения с удаленного сервера после получения и записывать в syslog. Если вы хотите удалять только письма старше десяти дней, вы можете изменить раздел [options] следующим образом: vi ~/.getmail/getmailrc `` | [...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true | Вы можете узнать больше обо всех доступных опциях на http://pyropus.ca/software/getmail/configuration.html#conf-options.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.