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


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

Безопасность

Внимание!!!
В данной статье приведена инструкция, в результате выполнения которой логин и пароль от вашего почтового ящика будут храниться в текстовом виде в доступном для чтения файле. Если Вы допускаете возможность несанкционированного доступа третьих лиц к вашему компьютеру в ваше отсутствие- воздержитесь от применения данного пакета!

Ссылки

Тема с обсуждением данной статьи.