Разработать сборщик вложений из почтового ящика на Python 3

Цена договорная
30 мая 2019, 21:15 • 12 откликов • 70 просмотров
IMAP-почтовый ящик на яндексе. Адрес и пароль хранятся в файле конфигурации. На данный ящик регулярно отправляются письма с вложениями, в которых находятся прайс-листы поставщиков.
Формат вложений - таблица excel или csv. Внутри построчный список товарных позиций (моторы)

Таблица может иметь два варианта - заданный и пользовательский.

Заданный - собственный шаблон с фиксированным порядком колонок. Клиенты скачивают нашу форму и заполняют ее по образцу. Значения каждой строчки нужно обрабатывать.

Пользовательский - крупные клиенты делают выгрузку данных в собственном формате. В таблице могут присутствовать строчки с “лишними” предложениями (другие детали - не моторы). Нужно предусмотреть фильтры, которые будут их отсеивать. Как правило, в одном из полей указывается тип предложения: "двигатель", "коробка АКПП", "редуктор" и тд. Нужны только строки "двигатель".

Количество и порядок колонок заранее известно и фиксировано во всех случаях. Точный состав, типы данных и названия колонок будет сообщен позднее.
Количество колонок ожидается в районе 10-20шт (цена, пробег в км, страна-производитель, OEM-номер производителя, заголовок, описание, список ссылок на картинки)

Необходимо привести данные о цене, стране к единому формату. Например, колонка "Цена" может быть 23000, 34 000, 49.234 руб и тд.

Письмо может быть отправлено напрямую клиентом или переслано нашими сотрудниками. Если адрес отправителя входит в список адресов наших сотрудников (обычный list в файле конфигурации) - вытащить из тела письма письма адрес первоначального отправителя.



Предполагаемый алгоритм работы:

  1. Прочитать список писем из папки INBOX. Выбрать непрочитанное письмо.
  2. пометить письмо “прочитано”
  3. Получить исходного отправителя.
  4. По email отправителя получить ID клиента из базы MySQL запросом
“SELECT client_id FROM clients WHERE email=’$email’ LIMIT 1”
5. Определить является ли формат отправления нашим или собственным форматом клиента
6. Если формат пользовательский - преобразовать файл в собственный формат.
7. Распарсить файл
8. Занести данные в mysql-таблицу. Предварительно удалив из нее предыдущие объявления данного пользователя.
9. Переместить письмо в папку “PARSED”.
10. Переместить все прочитанные письма из папки INBOX в папку ERROR
11. goto 1


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

Тестовый сервер - Debian, доступ по SSH