Предыстория

На работе поступила задача от коллеги о необходимости решения вопроса с сохранением вложений в письма (поступают на определенный почтовый адрес) и сохранением их на файловом сервере. В теме письма указана аббревиатура, которую необходимо указать в имени директории, куда будет сохраняться вложения.

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

Что и для чего

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)


  1. olegtsss
    10.04.2024 13:02

    Насколько стабильно cifs монтирование на постоянной основе, не случаются сбои, приводящие к падению описанной связки? Вы забираете письма по pop3, оно автоматически удаляется с почтового сервера, это допустимо по вашей задаче?


    1. creaturegenesis Автор
      10.04.2024 13:02

      проблем с cifs'ом не было, насчет забора писем по pop3: в моем случае почтовый сервер работает на IMAP'е, удалений писем не происходит, он просто их читает, но даже если бы и удалял, то это было бы допустимо


  1. ThingCrimson
    10.04.2024 13:02
    +1

    Годно, олдскульно! Когда-то и я на procmail удалённое администрирование делал для сервера, доступного только по email (UUCP) — отправлял команды (обычно передёрнуть какой-то сервис) в PGP enctypted & signed, а procmail это разбирал, проверял и выполнял.

    Могу посоветовать обратить внимание на утилиту ripmime, очень годная замена для uudeview.


  1. fraks
    10.04.2024 13:02
    +1

    Создаем файл с кредами

    mount -a

    Тут какая-то другая команда должна была быть?


    1. creaturegenesis Автор
      10.04.2024 13:02

      Отредактировал, спасибо за внимательность )