Электронная почта · 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.
Get new posts in your inbox
No spam. Unsubscribe anytime.