Это старая версия документа.


Fetchmail- утилита для unix-подобных систем, созданная для сбора почты с удаленных POP3, IMAP, ETRN и ODMR почтовых серверов и доставки локальным пользователям. Другими словами- консольный почтовый клиент.

Установка

Пакет fetchmail находится в репозиториях Ubuntu, поэтому установка производится одной командой

sudo apt-get install fetchmail

Настройка

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

gedit ~/.fetchmailrc
skip pop.mail.ru proto POP3
user '<user_name>@mail.ru', with password '********'
skip imap.yandex.ru proto IMAP port 995
user '<user_name>@gmail.com', with password '*******'

Присваиваем права на исполнение

chmod 700 ~/.fetchmailrc

В данном примере приведены настройки для работы с серверами по протоколам POP3 и IMAP, если у вас одна учетная запись почты, то выберете свой вариант, вместо <user_name> введите имя контакта, а вместо свой * пароль. Параметр skip перед именем сервера указывает, что почту нужно проверять только по принудительному запросу. При таком конфигурационном файле обращение к почтовому серверу происходит с явным указанием: <code bash>fetchmail [параметры] pop.mail.ru</code> ======Использование====== Fetchmail представляет собой полноценный консольный почтовый клиент, при помощи которого можно принимать и пересылать почту, и основное её применение, конечно же, различного рода серверы. =====Проверка и отображение новых писем с помощью notify-osd===== В приведенном ниже описании рассматривается применение пакета fetchmail на обычных рабочих компьютерах с целью оповещения о наличии новых писем в вашем почтовом ящике. Данный способ основан на применении одного простого скрипта и стандартного пакета cron для того, что бы отказаться от запущенного в фоне тяжелого почтового клиента (Thunderbird, Evolution и т.д.). ====Скрипт проверки писем==== Создайте новый файл в удобной для Вас папке (рекомендуется использовать ~/bin, которая не будет удаляться при переустановке системы): <code bash>mkdir ~/bin gedit ~/bin/chck-mail.sh</code> И скопируйте в него следующее содержимое <code bash>#!/bin/bash #————–Проверка почтового ящика на сервере yandex.ru——————– checkmail=`fetchmail -c imap.yandex.ru` all=`echo $checkmail | cut -d « » -f 1` readed=`echo $checkmail | cut -d ' ' -f 3 | sed s/\(g` acc1=`echo $checkmail | cut -d ' ' -f 6` let «div = $all - $readed» if [ $div != 0 ] 2>/dev/null; then if [ $div -eq 1 ]; then notify-send «Электропочта» «Для $acc1 одно новое письмо» -i mail-notification.png -t 20000 elif [ $div -eq 2 -o $div -eq 3 -o $div -eq 4 ]; then notify-send «Электропочта» «Для $acc1 $div новых письма» -i mail-notification.png -t 20000 else notify-send «Электропочта» «Для $acc1 $div новых писем» -i mail-notification.png -t 20000 fi fi #————————Проверка почтового ящика на сервере mail.ru——————— checkmail=`fetchmail -c pop.mail.ru 2>/dev/null` mail2=`echo $checkmail | cut -d « » -f 1` acc2=`echo $checkmail | cut -d ' ' -f 4` if [ $acc2 = <user_name>@mail.ru ] 2>/dev/null; then if [ $mail2 -eq 1 ]; then notify-send «Электропочта» «Для $acc2 одно новое письмо» -i mail-notification.png -t 20000 elif [ $mail2 -eq 2 -o $mail2 -eq 3 -o $mail2 -eq 4 ] ; then notify-send «Электропочта» «Для $acc2 $mail2 новых письма» -i mail-notification.png -t 20000 else notify-send «Электропочта» «Для $acc2 $mail2 новых писем» -i mail-notification.png -t 20000 fi fi </code> В тексте необходимо заменить <user_name> на свое имя пользователя почтового сервера.
Как можно заметить файл описывает два метода проверки почты по различным протоколам IMAP и POP3, настоятельно рекомендуется использовать IMAP, если нужно сохранять письма на сервере (для этого в настройках почтового сервера нужно указать протокол, по которому будут отдаваться письма почтовым клиентам (mail.ru не поддерживает IMAP). При использовании протокола POP3 в настройках почтового клиента, который будет использоваться для просмотра писем необходимо указать «Удалять письма с сервера», в противном случае скрипт будет постоянно оповещать о наличии новых писем.
В строках типа <code bash>notify-send «Электропочта» «Для $acc1 одно новое письмо» -i mail-notification.png -t 20000</code> последняя цифра означает время отображения всплывающего уведомления в миллисекундах. Необходимо сделать данный файл исполняемым <code bash>chmod +x bin/chck-mail.sh</code> Отправьте себе тестовое письмо и в терминале запустите скрипт на исполнение <code bash> ~/bin/chck-mail.sh</code> должно появиться подобное уведомление: В случае возникновения ошибок, напишите нам об этом на форуме, приведя текст ошибки. ====Задание cron==== Для автоматической проверки почтового ящика необходимо добавить задание cron для созданного ранее скрипта, для этого в терминале введите команду <code bash>crontab -e</code>, если вы ни разу этого не делали, то появится диалог выбора предпочитаемого редактора, укажите nano (выбор 2 по умолчанию). В появившемся окне редактора допишите в конец файла: <code bash> DISPLAY=:0 */10 * * * * /home/<user_name>/bin/chck-mail.sh </code> Первая строка говорит консольному cron какой дисплей использовать для вывода графики. Во второй устанавливается выполнение скрипта chck-mail.sh (измените <user_name> на свое имя пользователя в системе) каждые 10 минут. Сохраняем и закрываем редактор, и если все правильно, то в терминале появится строка <code>crontab: installing new crontab</code> ======Безопасность====== <note warning>Внимание!!!
В данной статье приведена инструкция, в результате выполнения которой логин и пароль от вашего почтового ящика будут храниться в текстовом виде в доступном для чтения файле. Если Вы допускаете возможность несанкционированного доступа третьих лиц к вашему компьютеру в ваше отсутствие- воздержитесь от применения данного пакета!</note> ======Использование fetchmail для получения почтовых вложений====== <note important>Внимание: вместо параметров user, username, password и т.д. вы должны подставить свои значения</note> Данный раздел описывает следующий сценарий работы: у вас есть сервер, принимающий почту, в письмах встречаются вложения, которые нужно сохранять отдельно (к примеру, вложенные в письма торрент-файлы, которые сразу ставятся на закачку при сохранении их в определенный каталог). Функционала «голого» fetchmail здесь не хватит, дополнительно установим криптографический пакет openssl, почтовый фильтр procmail и утилиту для сохранения вложений uudeview: <code bash>sudo apt install openssl procmail uudeview</code> Настройка описывается на примере gmail (сразу рекомендую в дебрях Гугла разрешить непроверенным приложениям получать доступ к вашему почтовому ящику, иначе не оберетесь проблем). Почтовый ящик я для указанной выше цели использую отдельный, все подряд на него не сыплется, поэтому фильтрацию вложений в этом гайде я не описываю. Получим сертификат Gmail (операции с сертификатом рекомендуется производить в отдельном каталоге с ограниченными правами доступа для посторонних, я в примере сохраняю его в домашней папке пользователя под названием gmail.com.pem): <code bash>cd ~ && echo «quit» | openssl s_client -connect pop.gmail.com:995 -showcerts 2>&1 | awk '/^[\-]+BEGIN CERTIFICATE[\-]+$/,/^[\-]+END CERTIFICATE[\-]+$/ {if (/^[\-]+BEGIN CERTIFICATE[\-]+$/) { count=count+1; flag=1 } if (count==1 && flag==1) { print $0 } if (/^[\-]+END CERTIFICATE[\-]+$/) { flag=0 }}' > gmail.com.pem</code> Хешируем: <code bash>c_rehash $HOME</code> Получаем отпечаток ключа сертификата: <code bash>openssl x509 -in /home/user/.sslcerts/gmail.pem -noout -md5 -fingerprint</code> В выхлопе будет что-то вроде MD5 Fingerprint=44:A8:E9:2C:FB:A9:7E:6D:F9:DB:F3:62:B2:9E:F1:A9. Приводим конфигурационный файл ~/.fetchmailrc к следующему виду (не забываем про права 600): <code bash> set daemon 60#это включение режима работы в качестве демона и установка периодичности проверки почты poll imap.gmail.com port 995 proto POP3 user 'username@gmail.com' pass 'password' ssl sslcertpath /home/user sslfingerprint «44:A8:E9:2C:FB:A9:7E:6D:F9:DB:F3:62:B2:9E:F1:A9»#берем значение из выхлопа выше в данной статье mda 'procmail -d %T' set syslog set logfile fetchmail/logs/fetchmail.log </code> Создаем нужные нам каталоги для работы fetchmail: <code bash>mkdir -p ~/fetchmail/logs/ ~/fetchmail/backup/ ~/fetchmail/attachments/</code> По пути ~/fetchmail/logs/fetchmail.log нам будет доступен лог работы fetchmail, что мне, к примеру, упростило поиск ошибок в настройках (гайды из интернета как всегда не работают, возможно, у вас не заработает именно этот гайд8-)). Создаем конфигурационный файл ~/.procmailrc со следующим содержимым: <code bash> :0 *^content-Type: { # сделаем копию принятого письма :0c: $HOME/fetchmail/backup # а здесь будут распакованы все файлы из письма и сложены в каталог # для этого сделаем форвард в uudeview, который распакует вложения в $HOME/fetchmail/attachments # опция -a создает нумерованные копии файлов, если файлы с таким именем уже обнаружены :0f #в оригинальном конфиге эта строка выглядела как «:0fw» и не работала | uudeview -i +a +o -p $HOME/fetchmail/attachments - } </code> Теперь остается добавить fetchmail в cron для автозагрузки. В файле ~/fetchmail/fetchmail.cron сохраняем следующее содержимое: <code bash> PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin @reboot fetchmail </code> Добавляем информацию в планировщик: <code bash> crontab ~/fetchmail/fetchmail.cron </code> И запускаем клиент: <code bash> fetchmail </code> Если что-то не сработает - в первую очередь смотрите лог fetchmail, затем гуглите. Если чего-то в вашей системе не хватает, возможно вам потребуется дополнительно установить пакеты mailutils, exim4 и sendmail. ======Ссылки===== Тема с обсуждением данной статьи. —-