Удобной возможностью современных почтовых сервисов является отправка больших файлов вместе с письмом. При этом реально файл не отправляется по почте. Вместо этого отправляется только ссылка для загрузки файла, который автоматически загружается в файловое хранилище. Я расскажу, как настроить автоматическую загрузку файлов в собственное облачное хранилище Nextcloud при отправке его через Roundcube или Thunderbird.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Введение
Эту статью можно считать продолжением моего цикла про настройку почтового сервера в Debian на базе Postfix и Dovecot. Она является его логическим продолжением и написана на базе именно этого почтового сервера. Хотя в рамках темы с прикреплением файлов принципиального значения не имеет, какой используется почтовый сервер, так как это функциональность исключительно почтового клиента. В данном случае Roundcube и Thunderbird.
Далее я буду считать, что у вас уже есть настроенный веб интерфейс RoundCube и файловое хранилище для пользователей Nextcloud. Его установка и настройка выходят за рамки этой статьи. Установку RoundCube вы можете посмотреть в моей статье, ссылка на которую приведена выше.
Установка плагина nextcloud_attachments для RoundCube
Установим плагин nextcloud_attachments для автоматической загрузки больших файлов в облако и вставки ссылок на них в письма. Для этого достаточно скопировать исходные файлы из репозитория в директорию plugins вашего RoundCube. У меня это папка /var/www/webmail/plugins/. Перехожу в неё, устанавливаю git и копирую исходники:
# cd /var/www/webmail/plugins/ # apt install git # git clone https://github.com/bennet0496/nextcloud_attachments
Перехожу в директорию nextcloud_attachments и копирую стандартную конфигурацию, куда буду вносить изменения:
# cd nextcloud_attachments # cp config.inc.php.dist config.inc.php
Добавляю пару параметров в config.inc.php, остальные оставляю по умолчанию:
$config["nextcloud_attachment_server"] = "https://342091.simplecloud.ru"; $config["nextcloud_attachment_softlimit"] = "null";
- nextcloud_attachment_server - адрес сервера Nextcloud.
- nextcloud_attachment_softlimit - отключаю показ предупреждения для пользователя о том, что файл лучше загрузить в хранилище и отправить ссылку. Вместо этого мы жёстко установим лимит, при превышении которого файл можно будет только загрузить в хранилище, но не прикрепить к письму.
В почтовом сервере Postfix у меня установлен параметр в main.cf:
message_size_limit = 20000000
Письмо размером более 20000000 байт или 20 МБ на всё про всё, отклоняется. Мне видится это разумным ограничением, чтобы не раздувать чрезмерно почтовый архив. Пользователям дай только волю, они сразу начнут отправлять большие файлы, что значительно усложнит эксплуатацию сервера и бэкап почтового архива.
В настройках RoundCube у меня установлен параметр в файле config.inc.php:
$config['max_message_size'] = '25M';
Он не позволит прикрепить к письму вложение более 19-20 МБ. Это особенность почтового протокола, так как там вложения перед отправкой кодируются методами base64 и quoted-printable, описанные в стандарте MIME. В итоге письмо с вложением 19 МБ будет целиком весить в районе 25 МБ.
Теперь нам нужно убедиться, что веб сервер разрешает загрузку больших файлов. По умолчанию там могут быть настройки очень низкие, для файлов буквально в 2-3 МБ. Проверяем сначала параметры php. У меня это файл /etc/php/8.4/fpm/php.ini. Указываю нужные параметры:
post_max_size = 256M upload_max_filesize = 256M
Ограничиваю максимальный размер отправляемого файла в 256M. Вы можете установить лимит на своё усмотрение.
Проверяем ограничение в веб сервере. У меня это Angie, но настройка такая же, как в Nginx. Нас интересует параметр client_max_body_size. Глобально для всего веб сервера его не обязательно увеличивать, поэтому укажем его в настройке виртуального хоста с веб почтой. У меня это файл /etc/angie/http.d/webmail.conf. Добавляю в раздел server {}
server {
...
client_max_body_size 256M;
...
}
Перезапускаю службы для принятия изменений:
# systemctl restart php8.4-fpm angie
Настройка плагина и сопутствующих сервисов для загрузки файлов в почтовых письмах закончена. Можно проверять работу.
Проверка отправки больших файлов через почту
Идём в веб интерфейс RoundCube, создаём новое письмо и пытаемся к нему прикрепить файл более 20 МБ. Получаем предупреждение, что файл не может быть прикреплён и предложение добавить ссылку на него, загрузив его на Nextcloud.
Далее вам предложат пройти аутентификацию в Nextcloud и разрешить плагину загружать письма. Дальнейшие действия зависят от вашей аутентификации в Nextcloud. По умолчанию плагин попробует зайти в файловый сервис, используя те же учётные данные, что и в почтовом ящике. То есть будет попробован текущий email и пароль. Если учётная запись в Nextcloud такая же, то аутентификация пройдёт прозрачно и ничего вводить не надо будет. В противном случае нужно будет один раз залогиниться в Nextcloud, если этот браузер ещё не залогинен.
В дальнейшем файлы будут автоматически загружаться без дополнительных действий. Письмо с загруженным файлом выглядит примерно так:
У получателя это письмо выглядит так:
А при переходе по ссылке он попадёт в интерфейс Nextcloud, где для загрузки будет доступен файл.
Реализовано относительно просто и удобно. У пользователя Nextcloud все его вложения хранятся в отдельной директории Mail Attachments.
Имя этой директории настраивается в параметрах плагина.
Настройка плагина FileLink for Nextcloud в Thunderbird
Плагин с аналогичной функциональностью есть и для Thunderbird. Называется FileLink for Nextcloud and ownCloud. Настроить его просто, инструкция есть в репозитории.
Для установки надо зайти в параметры Thunderbird: Инструменты ⇨ Настройки ⇨ Составление ⇨ Вложения ⇨ Найти больше провайдеров.
В строку поиска вводим *cloud и устанавливаем соответствующее расширение:
Возвращаемся в раздел Вложения, нажимаем Добавить *cloud:
Указываем параметры доступа пользователя почты к Nextcloud и здесь же указываем, что будем предлагать службу загрузки файлов при превышении файлом размера в 20 МБ.
Создаём новое письмо и пробуем прикрепить большой файл:
Нажимаем Создать ссылку и дожидаемся загрузки файла в Nextcloud.
У получателя это письмо с большим вложением выглядит следующим образом:
При клике на ссылку сразу же начинается загрузка файла. В настройках плагина можно сделать так, что будет открываться в браузере страничка с файлом в Nextcloud, как это сделано в RoundCube, а не сразу прямая загрузка.
Заключение
Прикрепление больших файлов в отдельный сервис очень удобно, если отбросить сопутствующие вопросы в виде настройки Nextcloud и аутентификации. Пользователям всегда хочется просто прикрепить файл и отправить, не делая лишних движений. С этими плагинами это так и работает в автоматическом режиме.
Другое дело, что если вы не используете в работе Nextcloud, поднимать его только для вложений как-то хлопотно. Но с другой стороны, а как ещё решить этот вопрос, если у пользователей есть потребность в таком обмене файлами?
Помимо удобства пользователей вы ещё и разгружаете почтовый сервис, убирая из него лишние объёмы данных, которые нужно будет бэкапить. Хранение подобных файлов, в отличие от почты, не такой критический сервис. К нему требования по надёжности и стабильности попроще.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Server Admin Авторский блог системного администратора













