Предыстория
На работе поступила задача от коллеги о необходимости решения вопроса с сохранением вложений в письма (поступают на определенный почтовый адрес) и сохранением их на файловом сервере. В теме письма указана аббревиатура, которую необходимо указать в имени директории, куда будет сохраняться вложения.
В интернете я нашел несколько статей, с использованием данных инструментов, но по большей части они мне не давали сделать то, что было задумано и пришлось дописать конфигурационный файл, который позволил нам сохранять файлы на сетевой шаре.
Что и для чего
Fetchmail - он нам нужен для сбора писем с почтового сервера, настройка этой утилиты в целом не имеет каких-либо сложных пунктов. Более подробно здесь.
Procmail - это агент доставки электронной почты, позволяет обработать письмо. Более подробно по ссылке.
Так же нам необходима утилита uudeview - данная утилита работает с бинарными файлами, нужна для обработки вложений.
Установка и настройка утилит
Мною была выбрана серверная ubuntu 22.04, производим установку:
sudo apt update
sudo apt upgrade
apt install fetchmail procmail uudeview cifs-utils
и создаем директорию, где все будет жить
mkdir mail
Создаем файл fetchmail.log в созданной директории mail
touch mail/fetchmail.log
выдать доступы на него:
chmod 700 mail/fetchmail.log
chown user:user mail/fetchmail.log
подключаем сетевую папку (в моем случае файловый сервер работает на Windows Server, поэтому подключение через samba протокол через cifs)
Открываем файл /etc/fstab
mcedit /etc/fstab
И добавляем строку (сначала путь на файловый сервер, а потом точка монтирования)
//*путь к серверу* /mnt cifs defaults,uid=1000,gid=1000,rw,credentials=/home/user/.smbclient 0 0
Создаем файл с кредами
открываем файл
mcedit .smbclient
и добавляем строки с данными (укажите данные своей учетной записи):
username=user
password=password
domain=example.com
Монтируем
mount -a
далее, настраиваем fetchmail:
mcedit ~/.fetchmailrc
В случае IMAP подключения
poll mail.example.com
port 993
proto IMAP
user "user"
password "password"
ssl
mda "/usr/bin/procmail -d %T"
set syslog set logfile "mail/fetchmail.log"
где mail.example.com - почтовый сервер, к которому вы будете принимать почту
Остальное, думаю ясно и понятно )
в случае POP3 подключения
poll mail.example.com
port 995
proto POP3
user "user"
password "password"
ssl
mda "/usr/bin/procmail -d %T"
set syslog set logfile "mail/fetchmail.log"
Прописываем доступ к файлу:
chmod 700 .fetchmailrc
chown user:user .fetchmailrc
Теперь переходим к настройке Procmail
mcedit ~/.procmailrc
и добавляем следующее:
SHELL=/usr/bin/sh
subject =`cat | egrep "^Subject:" | awk '{ print $2 }'`
:0
* ^Subject:[ ].+[a-z0-9]
* ^Content-Type:
| mkdir /mnt/${subject} ;\
uudeview -i +a +o -p /mnt/$subject -
Прописываем доступ к файлу:
chmod 700 .procmailrc
chown user:user .procmailrc
Объясняю:
данный конфиг файл проверяет письма на почтовом сервере и создает папку с именем темы и сохраняет в нее вложения из письма
Запуск
Теперь, после всех настроек, мы отправляем тестовое письмо с вложением и выполняем команду:
fetchmail -kv
Если есть необходимость, добавьте в планировщик задач выполнение команды
открываем планировщик:
crontab -e
и добавляем запись, которая будет выполнять команду каждую минуту:
*/1 * * * * /usr/bin/fetchmail -kv
Проверяем, на наличие новой директории на сетевой шаре и вложений в них.
Финал
В моем случае возникла проблема с кодировкой , темы написанные на кириллице, сохраняются в кривом виде, поэтому используем латиницу, пока что решение данной проблемы не нашлось.
Если у вас не происходит сохранение файлов на сетевой шаре, а на локальном диске все окей, проверьте доступа к сетевой папке.
Комментарии (5)
ThingCrimson
10.04.2024 13:02+1Годно, олдскульно! Когда-то и я на procmail удалённое администрирование делал для сервера, доступного только по email (UUCP) — отправлял команды (обычно передёрнуть какой-то сервис) в PGP enctypted & signed, а procmail это разбирал, проверял и выполнял.
Могу посоветовать обратить внимание на утилиту ripmime, очень годная замена для uudeview.
fraks
10.04.2024 13:02+1Создаем файл с кредами
mount -a
Тут какая-то другая команда должна была быть?
olegtsss
Насколько стабильно cifs монтирование на постоянной основе, не случаются сбои, приводящие к падению описанной связки? Вы забираете письма по pop3, оно автоматически удаляется с почтового сервера, это допустимо по вашей задаче?
creaturegenesis Автор
проблем с cifs'ом не было, насчет забора писем по pop3: в моем случае почтовый сервер работает на IMAP'е, удалений писем не происходит, он просто их читает, но даже если бы и удалял, то это было бы допустимо