Ниже — готовый демон-скрипт на Python 3, который требует минимум зависимостей и выполняет описанное: каждые 5 секунд (через cron не нужно — лучше запускать как демон или systemd service; если хотите именно CRON каждые 5 секунд — cron не поддерживает интервал <1 мин, поэтому используйте loop) проверяет почту по IMAP, берет письма с темой "url", парсит список URL в теле, скачивает их с помощью настраиваемой внешней утилиты (по умолчанию два варианта с wget: "single-page-with-images" и "recursive-depth-1"), собирает скачанные файлы в ZIP и отправляет назад через SMTP. Константы вверху файла легко менять.
Требования:
Python 3.8+
pip install python-dotenv requests python-magic (опционально) beautifulsoup4 lxml
Встроенные модули: imaplib, smtplib, email, subprocess, zipfile, tempfile, os, time, re, logging
Файл: mail_url_worker.py
https://pastebin.com/AwPgiMj9
Инструкция по использованию:
Поместите файл, сделайте исполняемым: chmod +x mail_url_worker.py
Установите зависимости: pip install python-dotenv beautifulsoup4 lxml
Отредактируйте константы сверху (IMAP/SMTP/пользователь/пароли). Можно заменить на чтение из окружения.
Убедитесь, что в DOWNLOADERS указаны те утилиты, которые установлены на сервере (wget доступен по умолчанию в большинстве Linux). Можно добавить команду для httrack, curl или иной утилиты — шаблон должен включать {url} и, при необходимости, {outdir}.
Запустите как демон или systemd service. Пример systemd unit (коротко):
Создайте /etc/systemd/system/mail_url_worker.service с запуском python3 /path/to/mail_url_worker.py, затем systemctl enable --now mail_url_worker
Пояснения про выбор downloader в письме:
Если в тексте письма есть строка типа "downloader: recursive-depth-1" или "downloader=single-page-with-images", скрипт использует соответствующий ключ из DOWNLOADERS. Иначе — DEFAULT_DOWNLOADER.
Безопасность и ограничения:
Скрипт запускает внешние команды — убедитесь, что принимаемые URL безопасны и что у пользователя, под которым работает скрипт, нет лишних прав.
Таймаут на скачивание — 300 секунд для каждого вызова.
Для больших сайтов/много URL может потребоваться больше места/памяти — адаптируйте.
Если хотите — могу:
Привести версию с чтением настроек из .env,
Добавить обработку вложенных команд (например, скачивание по списку из вложения),
Подготовить systemd unit и инструкции по безопасности.