Надсилання пошти
Листи з "Рахівниці" надсилає служба abasyn на сервері. Склад лише ставить лист у чергу в базі даних, тож на робочих місцях нічого налаштовувати не треба: одна поштова скринька відправника на всю компанію, налаштована один раз у конфігурації abasyn.
Через цю чергу йдуть:
- кнопка Відправити документ поштою на панелі інструментів Складу;
- Службове → Відправити лист автору;
- Поштова розсилка;
- сповіщення з каналом Пошта (Довідники → Працівники, вкладка Сповіщення): нове замовлення, Z-звіт, здача каси.
Поки abasyn не налаштовано, Склад приймає листи без проблем, але вони просто накопичуються в черзі. Після налаштування abasyn надішле все, що накопичилось.
Що потрібно перед початком
- Служби abrest і abasyn запущені на сервері, служби активовані у Складі - так само, як для синхронізації з інтернет-магазином.
- Поштова скринька, з якої йтимуть листи. Нижче - на прикладі Gmail.
- abasyn має підтримку TLS: у стані служби поле
tlsне дорівнюєunavailable(див. розділ «Перевірка»). Без неї Gmail та більшість поштових сервісів з'єднання не приймуть. На Linux для цього потрібен пакетlibssl3, встановлюється за залежностями, на Windows потрібне встановлюється разом зі службами.
Gmail: пароль застосунку
Звичайний пароль облікового запису Google для цього не підходить - потрібен пароль застосунку.
- Увійдіть в обліковий запис Google, з якого надсилатимуться листи.
- Безпека → Двоетапна перевірка - увімкніть, якщо ще не ввімкнено. Без неї паролі застосунків недоступні.
- Відкрийте https://myaccount.google.com/apppasswords, введіть назву,
наприклад
Рахівниця, і натисніть Створити. - 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:
На Windows - службу abasyn у Службах або sc stop abasyn і
sc start abasyn від імені адміністратора.
Перевірка
$KEY - ключ API abasyn.
1. Стан служби.
tlsне повинно бутиunavailable;- через
intervalсекунд після запуску вworkersз'являєтьсяMailзі станомOK. Якщо його немає - у конфігураціїenabledнеtrue, або abasyn не перечитав файл.
2. Тестовий лист. У Складі Службове → Відправити лист автору, в полі Одержувач вкажіть власну адресу - іншу, ніж скринька відправника, - заповніть тему й текст і надішліть. Лист самому собі Gmail кладе лише в Надіслані, а не у Вхідні.
3. Не чекати хвилину. Щоб abasyn переглянув чергу негайно:
4. Результат.
- Лист прийшов. Якщо ні - перевірте теку Спам.
- У журналі abasyn з'явився рядок
Notify runner: mail dispatch ok: {... "sent" : 1 ...}. - Той самий підсумок видно в
last_statsзавданняmail:
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):
Обмеження 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, у журналі нічого |
Те саме: надсилання вимкнено. Пуста черга в журнал не пишеться, тож тиша за увімкненого надсилання означає, що листів немає. |