Содержание
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
перед именем сервера указывает, что почту нужно проверять только по принудительному запросу. При таком конфигурационном файле обращение к почтовому серверу происходит с явным указанием:
fetchmail [параметры] pop.mail.ru
Использование
Fetchmail представляет собой полноценный консольный почтовый клиент, при помощи которого можно принимать и пересылать почту, и основное её применение, конечно же, различного рода серверы.
Проверка и отображение новых писем с помощью notify-osd
В приведенном ниже описании рассматривается применение пакета fetchmail на обычных рабочих компьютерах с целью оповещения о наличии новых писем в вашем почтовом ящике. Данный способ основан на применении одного простого скрипта и стандартного пакета cron
для того, что бы отказаться от запущенного в фоне тяжелого почтового клиента (Thunderbird, Evolution и т.д.).
Скрипт проверки писем
Создайте новый файл в удобной для Вас папке (рекомендуется использовать ~/bin, которая не будет удаляться при переустановке системы):
mkdir ~/bin gedit ~/bin/chck-mail.sh
И скопируйте в него следующее содержимое
#!/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
В тексте необходимо заменить <user_name> на свое имя пользователя почтового сервера.
Как можно заметить файл описывает два метода проверки почты по различным протоколам IMAP и POP3, настоятельно рекомендуется использовать IMAP, если нужно сохранять письма на сервере (для этого в настройках почтового сервера нужно указать протокол, по которому будут отдаваться письма почтовым клиентам (mail.ru не поддерживает IMAP). При использовании протокола POP3 в настройках почтового клиента, который будет использоваться для просмотра писем необходимо указать «Удалять письма с сервера», в противном случае скрипт будет постоянно оповещать о наличии новых писем.
В строках типа
notify-send "Электропочта" "Для $acc1 одно новое письмо" -i mail-notification.png -t 20000
последняя цифра означает время отображения всплывающего уведомления в миллисекундах.
Необходимо сделать данный файл исполняемым
chmod +x bin/chck-mail.sh
Отправьте себе тестовое письмо и в терминале запустите скрипт на исполнение
~/bin/chck-mail.sh
должно появиться подобное уведомление:
В случае возникновения ошибок, напишите нам об этом на форуме, приведя текст ошибки.
Задание cron
Для автоматической проверки почтового ящика необходимо добавить задание cron для созданного ранее скрипта, для этого в терминале введите команду
crontab -e
, если вы ни разу этого не делали, то появится диалог выбора предпочитаемого редактора, укажите nano
(выбор 2 по умолчанию).
В появившемся окне редактора допишите в конец файла:
DISPLAY=:0 */10 * * * * /home/<user_name>/bin/chck-mail.sh
Первая строка говорит консольному cron какой дисплей использовать для вывода графики. Во второй устанавливается выполнение скрипта chck-mail.sh (измените <user_name> на свое имя пользователя в системе) каждые 10 минут. Сохраняем и закрываем редактор, и если все правильно, то в терминале появится строка
crontab: installing new crontab
Безопасность
В данной статье приведена инструкция, в результате выполнения которой логин и пароль от вашего почтового ящика будут храниться в текстовом виде в доступном для чтения файле. Если Вы допускаете возможность несанкционированного доступа третьих лиц к вашему компьютеру в ваше отсутствие- воздержитесь от применения данного пакета!
Использование fetchmail для получения почтовых вложений
Данный раздел описывает следующий сценарий работы: у вас есть сервер, принимающий почту, в письмах встречаются вложения, которые нужно сохранять отдельно (к примеру, вложенные в письма торрент-файлы, которые сразу ставятся на закачку при сохранении их в определенный каталог).
Функционала «голого» fetchmail здесь не хватит, дополнительно установим криптографический пакет openssl, почтовый фильтр procmail и утилиту для сохранения вложений uudeview:
sudo apt install openssl procmail uudeview
Настройка описывается на примере gmail (сразу рекомендую в дебрях Гугла разрешить непроверенным приложениям получать доступ к вашему почтовому ящику, иначе не оберетесь проблем). Почтовый ящик я для указанной выше цели использую отдельный, все подряд на него не сыплется, поэтому фильтрацию вложений в этом гайде я не описываю.
Приводим конфигурационный файл ~/.fetchmailrc
к следующему виду:
set daemon 60 #интервал в секундах проверки почты демоном poll imap.gmail.com with nodns, with protocol IMAP user "user@gmail.com" there is "user" here,#строка "there is "user" here" позволяет соотнести логин почты с вашим пользователем Ubuntu по имени user; эта строка необязательна with password PaSSWorD, keep,#письма остаются на сервере после прочтения with ssl, sslcertck;#при таких настройках сертификат не нужно перекачивать и хешировать вручную mda 'procmail -d %T' set syslog set logfile fetchmail/logs/fetchmail.log
Не забываем про права 600 (без них fetchmail не будет работать с конфигом - небезопасно же, пароль открыт всем - и выругается):
chmod 600 ~/.fetchmailrc
Создаем нужные нам каталоги для работы fetchmail:
mkdir -p ~/fetchmail/logs/ ~/fetchmail/backup/ ~/fetchmail/attachments/
По пути ~/fetchmail/logs/fetchmail.log
нам будет доступен лог работы fetchmail, что мне, к примеру, упростило поиск ошибок в настройках (гайды из интернета как всегда не работают, возможно, у вас не заработает именно этот гайд). Лог нужно создать вручную:
> ~/fetchmail/logs/fetchmail.log
Создаем конфигурационный файл ~/.procmailrc
со следующим содержимым (учтите, что права на вашу директорию $HOME для работы procmail должны быть не более, чем 744, как и права на сам .procmailrc - без этого procmail будет заявлять, что конфиг подозрителен):
:0 *^content-Type: { # сделаем копию принятого письма :0c: $HOME/fetchmail/backup #здесь будут распакованы все файлы из письма и сложены в нужный нам каталог #для этого сделаем форвард в uudeview, который распакует вложения в $HOME/fetchmail/attachments #опция -a создает нумерованные копии файлов, если файлы с таким именем уже обнаружены :0f | uudeview -i +a +o -p $HOME/fetchmail/attachments - }
Теперь остается добавить fetchmail в cron для автозагрузки. В файле ~/fetchmail/fetchmail.cron
сохраняем следующее содержимое:
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin @reboot fetchmail
Добавляем информацию в планировщик:
crontab ~/fetchmail/fetchmail.cron
И запускаем клиент:
fetchmail
Если что-то не сработает - в первую очередь смотрите лог fetchmail, затем гуглите.