Замена больших вложений в email на ссылку

Устанавливаем MIMEDefang:

apt update
apt install mimedefang -y

Правим файл /etc/default/mimedefang:

SOCKET=/var/spool/postfix/mimedefang/mimedefang.sock
MD_ALLOW_GROUP_ACCESS=yes

Добавляем пользователя postfix в группу defang:

usermod -aG defang postfix

Так как postfix работает в chroot-окружении, создаем папку для сокета mimedefang:

mkdir /var/spool/postfix/mimedefang

Правим /etc/postfix/main.cf:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:mimedefang/mimedefang.sock
non_smtpd_milters = unix:mimedefang/mimedefang.sock

Теперь нужно добавить следующее в конец функции filter в файле /etc/mail/mimedefang-filter:

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

    # Максимальный размер вложения (например, 10MB)
    my $MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024;
    # Директория для сохранения вложений
    my $ATTACHMENTS_DIR = "/var/mail/attachments";
    # URL, по которому будут доступны вложения
    my $ATTACHMENTS_URL = "https://mail.kini24.ru/attachments";

    # Создаем директорию, если её нет
    mkdir $ATTACHMENTS_DIR unless -d $ATTACHMENTS_DIR;

    $size = (stat($entity->bodyhandle->path))[7];
    if ($size > $MAX_ATTACHMENT_SIZE) {
        md_graphdefang_log("The attached file $fname is too big, replaced with a link");
        return action_replace_with_url($entity,
            "$ATTACHMENTS_DIR",
            "$ATTACHMENTS_URL",
            "Размер вложения превысил ограничения сервера, поэтому оно было удалено.\n" .
            "Вы можете скачать его по следующей ссылке:\n\n" .
            "_URL_");
    }

В результате аыполнения функции action_replace_with_url в конец письма будет вставлен текст и ссылка для скачивания вложения, а сам файл бует сохранен в папку /var/mail/attachments. Надо, кстати, покопаться и найти как вставлять ссылку в текст самого письма. Но пока что оставим как есть.

У меня почтовый и веб-сервер находятся на разных виртуальных машинах, поэтому папку /var/mail/attachments надо сделать общей. На почтовом сервере устанавливаем пакет сервера NFS:

apt install nfs-kernel-server -y

Открываем файл /etc/exports и вписываем в конец файла что-то вроде такого:

/var/mail/attachments 192.168.1.0/24(rw,sync,no_subtree_check)

И выполняем в консоли команду:

exportfs -a

Теперь переходим на веб-сервер и выполняем следующие команды:

apt update
apt install nfs-common -y

Открываем файл /etc/fstab и дописываем в конец:

192.168.1.12:/var/mail/attachments /var/www/mail/attachments nfs4 defaults 0 0

где 192.168.1.12 — IP-адрес почтового сервера.
Дальше выполняем команды:

mkdir -p /var/www/mail/attachments
chown -R www-data:www-data /var/www/mail/attachments
mount -a

И проверяем что папка смонтировалась:

ls -l /var/www/mail/attachments

После этого все вложения, которые были удалены из писем, должны стать доступны для скачивания.

Отправить
Поделиться