Перейти до змісту

Надсилання пошти

Листи з "Рахівниці" надсилає служба abasyn на сервері. Склад лише ставить лист у чергу в базі даних, тож на робочих місцях нічого налаштовувати не треба: одна поштова скринька відправника на всю компанію, налаштована один раз у конфігурації abasyn.

Через цю чергу йдуть:

  • кнопка Відправити документ поштою на панелі інструментів Складу;
  • Службове → Відправити лист автору;
  • Поштова розсилка;
  • сповіщення з каналом Пошта (Довідники → Працівники, вкладка Сповіщення): нове замовлення, Z-звіт, здача каси.

Поки abasyn не налаштовано, Склад приймає листи без проблем, але вони просто накопичуються в черзі. Після налаштування abasyn надішле все, що накопичилось.


Що потрібно перед початком

  • Служби abrest і abasyn запущені на сервері, служби активовані у Складі - так само, як для синхронізації з інтернет-магазином.
  • Поштова скринька, з якої йтимуть листи. Нижче - на прикладі Gmail.
  • abasyn має підтримку TLS: у стані служби поле tls не дорівнює unavailable (див. розділ «Перевірка»). Без неї Gmail та більшість поштових сервісів з'єднання не приймуть. На Linux для цього потрібен пакет libssl3, встановлюється за залежностями, на Windows потрібне встановлюється разом зі службами.

Gmail: пароль застосунку

Звичайний пароль облікового запису Google для цього не підходить - потрібен пароль застосунку.

  1. Увійдіть в обліковий запис Google, з якого надсилатимуться листи.
  2. Безпека → Двоетапна перевірка - увімкніть, якщо ще не ввімкнено. Без неї паролі застосунків недоступні.
  3. Відкрийте https://myaccount.google.com/apppasswords, введіть назву, наприклад Рахівниця, і натисніть Створити.
  4. Google покаже пароль з 16 літер групами по чотири. Скопіюйте його без пробілів - більше його не покажуть.

У Google Workspace сторінка паролів застосунків може бути вимкнена адміністратором домену - тоді її треба увімкнути в консолі адміністратора.

Зміна пароля облікового запису Google відкликає всі паролі застосунків. Після цього листи перестануть надсилатися з помилкою автентифікації - створіть новий пароль застосунку і внесіть його в конфігурацію.


Налаштування abasyn

Конфігурація - файл abasyn.yaml:

  • Linux: /etc/abacus/abasyn.yaml або /opt/abacus/etc/abasyn.yaml;
  • Windows: C:\ProgramData\Abacus\Conf\abasyn.yaml.

Додайте до нього блок mail (повний перелік з коментарями є у abasyn.yaml.example поруч з програмою):

mail:
  enabled: true
  host: smtp.gmail.com
  port: 587
  username: 'shop@gmail.com'
  password: 'abcdefghijklmnop'
  from_addr: 'shop@gmail.com'
  from_name: 'Магазин "Ромашка"'
Поле Значення
enabled true вмикає надсилання.
host, port Поштовий сервер. Для Gmail - smtp.gmail.com, порт 587.
tls Спосіб шифрування: auto (типово - 465 з шифруванням одразу, інші порти через STARTTLS), starttls, implicit, none. Для Gmail не вказуйте.
username, password Адреса Gmail і пароль застосунку.
from_addr Адреса відправника. Обов'язкова: без неї жоден лист не піде. Для Gmail - та сама, що в username, або адреса, додана в Gmail як Надсилати пошту як; іншу Gmail замінить на адресу облікового запису.
from_name Ім'я відправника, яке бачить одержувач.
interval Як часто abasyn перевіряє чергу, секунди. Типово 60.
dry_run true - репетиція: abasyn записує в журнал, що надіслав би, але нічого не надсилає і черги не змінює.
max_attempts Скільки разів повторювати лист після тимчасової помилки, перш ніж позначити його невдалим. Типово 5.
backoff_base, backoff_cap Пауза перед першим повтором і найбільша пауза, секунди. Типово 60 і 3600: паузи 1, 2, 4... хвилини, не довше години.

Після зміни файлу перезапустіть abasyn:

systemctl restart abasyn

На Windows - службу abasyn у Службах або sc stop abasyn і sc start abasyn від імені адміністратора.


Перевірка

$KEY - ключ API abasyn.

1. Стан служби.

curl -H "X-API-KEY: $KEY" http://localhost:4602/api/status
  • tls не повинно бути unavailable;
  • через interval секунд після запуску в workers з'являється Mail зі станом OK. Якщо його немає - у конфігурації enabled не true, або abasyn не перечитав файл.

2. Тестовий лист. У Складі Службове → Відправити лист автору, в полі Одержувач вкажіть власну адресу - іншу, ніж скринька відправника, - заповніть тему й текст і надішліть. Лист самому собі Gmail кладе лише в Надіслані, а не у Вхідні.

3. Не чекати хвилину. Щоб abasyn переглянув чергу негайно:

curl -H "X-API-KEY: $KEY" -X POST http://localhost:4602/api/jobs/mail/run

4. Результат.

  • Лист прийшов. Якщо ні - перевірте теку Спам.
  • У журналі abasyn з'явився рядок Notify runner: mail dispatch ok: {... "sent" : 1 ...}.
  • Той самий підсумок видно в last_stats завдання mail:
curl -H "X-API-KEY: $KEY" http://localhost:4602/api/jobs

5. Лист з вкладенням. Відкрийте будь-який документ з контрагентом, у якого вказано e-mail (або змініть одержувача на свою адресу), натисніть Відправити документ поштою, виберіть шаблон друку. Має прийти лист з документом у форматі XLS.

Для першого знайомства без реальних листів можна спершу поставити dry_run: true: журнал покаже Notify dry-run: would send id N over mail, а листи залишаться в черзі до вимкнення репетиції.


Черга листів

Кожен лист - рядок у таблиці S_NOTIFY_QUEUE з CHANNEL = 'mail', по рядку на одержувача сповіщення. Поле STATUS:

STATUS Значення
Q У черзі. Якщо ATTEMPTS більше нуля - вже були тимчасові помилки, наступна спроба після паузи.
S Надіслано.
F Не надіслано остаточно. Причина - у LAST_ERROR.

Остаточною вважається помилка, яку повтор не виправить: неправильна адреса одержувача, лист, відхилений сервером, пошкоджене вкладення. Такий лист позначається F одразу. Тимчасові помилки (сервер недоступний, обрив з'єднання) повторюються до max_attempts разів.

Неправильний логін чи пароль, відсутній TLS або недоступний сервер не псують черги: abasyn не може відкрити сеанс, записує помилку в журнал і стан Mail, а листи лишаються Q і підуть, щойно проблему виправлено.

Повторно надіслати листи, які отримали F (наприклад, після перевищення добового ліміту Gmail):

update VW_NOTIFY_QUEUE set STATUS = 'Q', ATTEMPTS = 0
where CHANNEL = 'mail' and STATUS = 'F';

Обмеження Gmail

  • Звичайний обліковий запис Gmail надсилає до 500 одержувачів на добу, Google Workspace - до 2000. Після цього Gmail відхиляє листи до кінця доби, і вони отримують F з помилкою про квоту. Найпростіше перевищити ліміт поштовою розсилкою на велику базу клієнтів.
  • Вкладення більше 10 МБ Склад не прийме ще до постановки в чергу.

Типові проблеми

Симптом Причина та рішення
SMTP authentication rejected for ...: 535 ... Введено звичайний пароль Google замість пароля застосунку, або пароль застосунку відкликано зміною пароля облікового запису. Створіть новий пароль застосунку.
SMTP login failed, а в стані служби tls: unavailable abasyn не має TLS. На Linux встановіть libssl3 і перезапустіть abasyn; на Windows перевстановіть служби.
invalid sender address Не заповнено або неправильно заповнено from_addr.
unknown mail tls mode Помилка в значенні tls.
Unknown mail type Помилка в значенні type; його можна не вказувати.
failed to fetch the mail outbox abasyn не може отримати чергу від abrest: abrest не запущено або служби не активовано.
Лист прийшов від адреси облікового запису, а не від from_addr Gmail підміняє відправника, якого немає серед Надсилати пошту як у налаштуваннях Gmail.
Mail у стані служби відсутній enabled не true, або abasyn не перезапущено після зміни файлу.
Листи в черзі Q, у журналі нічого Те саме: надсилання вимкнено. Пуста черга в журнал не пишеться, тож тиша за увімкненого надсилання означає, що листів немає.