Переход с публичного почтового сервиса на собственный Mailcow часто сопровождается неожиданными проблемами. Одна из них — невозможность отправить крупные вложения. Стандартные лимиты почтовых серверов и ограничения получателей делают отправку файлов размером более 20–30 МБ практически невозможной. В этой статье я расскажу, как мы решили эту проблему, добавив в веб-интерфейс SOGo кнопку для загрузки файлов в самохостед-сервис Pingvin Share X и вставки ссылки в письмо.

Почему стандартные методы не работают

Увеличение лимита вложений в Mailcow не решает проблему целиком. Даже если ваш сервер принимает письма с большими файлами, почтовые ящики получателей (особенно корпоративные) часто имеют собственные ограничения. Кроме того, передача больших объёмов данных через SMTP неэффективна и создаёт нагрузку на канал. Использование облачных хранилищ требует от получателя дополнительных действий: регистрации, установки приложений или ожидания ссылки. Нам же нужно было решение, которое позволит сотрудникам отправлять файлы привычным способом — через почтовый клиент, но без головной боли.

Выбор инструмента: почему Pingvin Share X

Pingvin Share X — это форк популярного сервиса для обмена файлами, который можно развернуть на собственном сервере. Он поддерживает генерацию ссылок с ограниченным сроком действия, пароли и уведомления. В отличие от многих аналогов, Pingvin Share X имеет простой API и легко интегрируется в сторонние приложения. Мы выбрали его за минималистичный интерфейс, возможность кастомизации и отсутствие навязчивой рекламы. Важно: сервис должен быть доступен как изнутри сети, так и снаружи, чтобы получатели могли скачать файлы.

Шаги по интеграции: от идеи до кнопки в SOGo

Процесс состоит из нескольких этапов. Сначала мы настроили сам Pingvin Share X и убедились, что он корректно работает. Затем написали небольшой PHP-скрипт, который принимает файл от пользователя, загружает его в Pingvin Share X через API и возвращает ссылку. После этого модифицировали интерфейс SOGo, добавив кнопку, которая вызывает этот скрипт и вставляет ссылку в тело письма.

  • Установка и настройка Pingvin Share X. Разверните сервис согласно официальной документации. Убедитесь, что настроены права доступа, срок хранения файлов и, при необходимости, аутентификация. Для интеграции с SOGo мы использовали API-ключ, созданный в панели администратора Pingvin Share X.
  • Разработка PHP-скрипта. Скрипт должен принимать файл через POST-запрос, проверять его размер и тип, затем отправлять в Pingvin Share X методом API. В ответ сервис возвращает URL для скачивания. Этот URL и будет вставляться в письмо. Важно предусмотреть обработку ошибок: если загрузка не удалась, пользователь должен увидеть сообщение.
  • Модификация SOGo. В SOGo можно добавить кастомную кнопку через плагин или прямое редактирование шаблонов. Мы использовали JavaScript, который при клике на кнопку открывает диалог выбора файла, отправляет его на наш PHP-скрипт и по успешному ответу вставляет ссылку в поле редактора письма. Дополнительно можно прикреплять PDF-файл с информацией о ссылке, но мы ограничились текстовой вставкой.

Весь процесс занял около двух дней с учётом тестирования. Основная сложность была в корректной обработке CORS и настройке прав доступа к API.

Типичные ошибки и как их избежать

При интеграции легко наступить на несколько граблей. Во-первых, не стоит делать ссылки общедоступными без ограничения по времени — это риск утечки данных. Обязательно настройте срок жизни ссылки в Pingvin Share X. Во-вторых, при написании PHP-скрипта убедитесь, что он защищён от несанкционированного доступа: используйте токен или сессионную аутентификацию. В-третьих, тестируйте отправку файлов разных типов и размеров, чтобы убедиться, что скрипт не падает на больших объёмах. И последнее: предупредите сотрудников, что ссылки временные, и при необходимости они могут запросить файл повторно.

В итоге мы получили удобный инструмент, который снял нагрузку с почтового сервера и упростил жизнь пользователям. Теперь отправить файл на 100 МБ так же просто, как и обычное письмо.