Это старая версия документа.
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, что мне, к примеру, упростило поиск ошибок в настройках (гайды из интернета как всегда не работают, возможно, у вас не заработает именно этот гайд).
Создаем конфигурационный файл ~/.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.
======Ссылки=====
Тема с обсуждением данной статьи.
—-