Автоотправка по почте #45

Closed
opened 2026-06-30 08:06:55 +07:00 by artem.kokos · 0 comments
Owner

Контекст

После генерации отчёта пользователь вручную отправляет его руководителю или в командный чат. Это рутинное действие, которое можно автоматизировать.

Предложение

Добавить возможность отправлять сгенерированный отчёт по email сразу после генерации. Все настройки SMTP и email живут в YAML-конфиге (~/.config/redmine-reporter/config.yml), см. #46.

Структура в конфиге

email:
  smtp:
    host: smtp.example.com
    port: 587
    user: bot@example.com
    password: ${SMTP_PASSWORD}
    tls: true
  from: bot@example.com
  to:
    - boss@example.com
    - pm@example.com
  cc: []
  bcc: []
  subject: "Отчёт {author} за {period}"
  body_text: "Во вложении отчёт по задачам Redmine."
  attach: true

Поля

  • email.smtp.host — SMTP-сервер.
  • email.smtp.port — порт.
  • email.smtp.user — логин для SMTP.
  • email.smtp.password — пароль. Рекомендуется ${SMTP_PASSWORD} из env, но можно и явно.
  • email.smtp.tls — использовать STARTTLS (true/false).
  • email.from — адрес отправителя.
  • email.to — список получателей.
  • email.cc, email.bcc — опционально.
  • email.subject — шаблон темы. Подстановки: {author}, {from}, {to}.
  • email.body_text — текст письма.
  • email.attach — прикреплять ли сгенерированный отчёт (true/false).

Поведение CLI

  • Флаг --email запускает отправку.
  • Если --email указан, но не указан --output, отчёт сохраняется во временный файл (или в output.dir из #43) и прикрепляется к письму.
  • Если --email указан без сгенерированного файла (например, консольный вывод), выводится ошибка.
  • Если секция email не заполнена, --email выводит понятное сообщение об ошибке.

Автофиксация периода

При отправке отчёта по почте логично автоматически фиксировать момент отправки, чтобы следующий отчёт не включал уже отправленные time entries. Поведение зависит от period.precision (#47):

  • period.precision: date — фиксируется дата отправки, следующий отчёт начинаётся со следующего дня.
  • period.precision: datetime — фиксируется момент времени отправки, следующий отчёт начинаётся с этого же момента.

Можно реализовать явно через --commit --email или автоматически, если --email активирует --commit неявно. Это нужно решить при реализации.

Примеры

# Сгенерировать и отправить
redmine-reporter --email

# Сгенерировать, сохранить и отправить
redmine-reporter --commit --email

# Только отправить уже существующий файл
redmine-reporter --output report.xlsx --email

HTML-письмо (опционально)

В будущем можно добавить email.body_html и встроенную таблицу отчёта в письмо. В рамках этой задачи достаточно текстового письма с вложением.

Связанные задачи

  • #46 — YAML-конфиг, в котором хранятся настройки SMTP и email.
  • #47 — поддержка datetime в периоде; --email должен корректно фиксировать момент отправки.
  • #43 — имя файла и пути по умолчанию.
  • #44--commit может запускаться вместе с --email.

Критерии приёмки

  • В config.yml поддержаны секции email и email.smtp.
  • Флаг --email отправляет отчёт по настроенным адресатам.
  • Поддерживаются to, cc, bcc.
  • Пароль SMTP можно задать через ${SMTP_PASSWORD} из env.
  • При ошибке подключения к SMTP выводится понятное сообщение.
  • При --email период фиксируется с учётом period.precision (#47).
  • Добавлены тесты на формирование письма и прикрепление файла.
## Контекст После генерации отчёта пользователь вручную отправляет его руководителю или в командный чат. Это рутинное действие, которое можно автоматизировать. ## Предложение Добавить возможность отправлять сгенерированный отчёт по email сразу после генерации. Все настройки SMTP и email живут в YAML-конфиге (`~/.config/redmine-reporter/config.yml`), см. #46. ## Структура в конфиге ```yaml email: smtp: host: smtp.example.com port: 587 user: bot@example.com password: ${SMTP_PASSWORD} tls: true from: bot@example.com to: - boss@example.com - pm@example.com cc: [] bcc: [] subject: "Отчёт {author} за {period}" body_text: "Во вложении отчёт по задачам Redmine." attach: true ``` ### Поля - `email.smtp.host` — SMTP-сервер. - `email.smtp.port` — порт. - `email.smtp.user` — логин для SMTP. - `email.smtp.password` — пароль. Рекомендуется `${SMTP_PASSWORD}` из env, но можно и явно. - `email.smtp.tls` — использовать STARTTLS (`true`/`false`). - `email.from` — адрес отправителя. - `email.to` — список получателей. - `email.cc`, `email.bcc` — опционально. - `email.subject` — шаблон темы. Подстановки: `{author}`, `{from}`, `{to}`. - `email.body_text` — текст письма. - `email.attach` — прикреплять ли сгенерированный отчёт (`true`/`false`). ## Поведение CLI - Флаг `--email` запускает отправку. - Если `--email` указан, но не указан `--output`, отчёт сохраняется во временный файл (или в `output.dir` из #43) и прикрепляется к письму. - Если `--email` указан без сгенерированного файла (например, консольный вывод), выводится ошибка. - Если секция `email` не заполнена, `--email` выводит понятное сообщение об ошибке. ## Автофиксация периода При отправке отчёта по почте логично автоматически фиксировать момент отправки, чтобы следующий отчёт не включал уже отправленные time entries. Поведение зависит от `period.precision` (#47): - `period.precision: date` — фиксируется дата отправки, следующий отчёт начинаётся со следующего дня. - `period.precision: datetime` — фиксируется момент времени отправки, следующий отчёт начинаётся с этого же момента. Можно реализовать явно через `--commit --email` или автоматически, если `--email` активирует `--commit` неявно. Это нужно решить при реализации. ## Примеры ```bash # Сгенерировать и отправить redmine-reporter --email # Сгенерировать, сохранить и отправить redmine-reporter --commit --email # Только отправить уже существующий файл redmine-reporter --output report.xlsx --email ``` ## HTML-письмо (опционально) В будущем можно добавить `email.body_html` и встроенную таблицу отчёта в письмо. В рамках этой задачи достаточно текстового письма с вложением. ## Связанные задачи - #46 — YAML-конфиг, в котором хранятся настройки SMTP и email. - #47 — поддержка `datetime` в периоде; `--email` должен корректно фиксировать момент отправки. - #43 — имя файла и пути по умолчанию. - #44 — `--commit` может запускаться вместе с `--email`. ## Критерии приёмки - [ ] В `config.yml` поддержаны секции `email` и `email.smtp`. - [ ] Флаг `--email` отправляет отчёт по настроенным адресатам. - [ ] Поддерживаются `to`, `cc`, `bcc`. - [ ] Пароль SMTP можно задать через `${SMTP_PASSWORD}` из env. - [ ] При ошибке подключения к SMTP выводится понятное сообщение. - [ ] При `--email` период фиксируется с учётом `period.precision` (#47). - [ ] Добавлены тесты на формирование письма и прикрепление файла.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#45