Отправка почты (EMAIL)
Оператор отправки почты создаёт действие, которое отправляет электронное письмо. У письма задаются адрес отправителя, адреса получателей с признаком видимости, тема, тело и список вложений; кроме того, для самого действия задаётся режим завершения — синхронный или асинхронный.
Адрес отправителя
Адрес отправителя задаётся отдельным свойством. По этому адресу выбирается существующий в системе аккаунт электронной почты (объект класса Email.Account), от имени которого выполняется отправка. Если адрес отправителя не задан, или аккаунт с указанным адресом не найден, по умолчанию выбирается аккаунт, для которого значение свойства Email.isDefaultInbox[Email.Account] не равно NULL. Если подходящий аккаунт не выбран, при выполнении действия генерируется исключение.
Получатели
Получатели задаются списком; каждый элемент списка состоит из адреса и признака видимости. Поддерживаются три признака:
| Признак | Что означает |
|---|---|
| основной | обычный получатель |
| копия | вторичный получатель, чей адрес виден остальным |
| скрытая копия | получатель, чей адрес не виден остальным |
В списке должен присутствовать хотя бы один основной получатель; список только из получателей с признаками копии или скрытой копии недопустим — при выполнении действия выбрасывается исключение.
Тема и тело
Тема задаётся свойством, возвращающим строку. Если тема не задана, используется значение '{mail.nosubject}'.
Тело задаётся свойством, возвращающим либо строку, либо файл; содержимое письма берётся из этого значения. Письмо всегда отправляется как HTML.
Вложения
К письму можно прикрепить произвольное число вложений. Вложение задаётся в одной из двух форм:
- одиночное вложение — пара из значения файла и (необязательного) имени;
- список вложений — пара из свойства, перечисляющего файлы (свойство индексировано порядковым номером и возвращает файл), и (необязательного) свойства, задающего имена в той же индексации.
В обеих формах имя задаётся без расширения: расширение определяется по классу файла, как и при записи файла. Если имя не задано, вложение получает имя вида 'attachmentK', где K — порядковый номер вложения.
Режим завершения
Режим определяет, когда завершается выполнение действия:
| Режим | Когда завершается | Поведение при ошибке |
|---|---|---|
| синхронный (по умолчанию) | после фактической отправки письма | генерируется исключение |
| асинхронный | сразу после постановки в очередь; отправка идёт в отдельном потоке | повторные попытки выполняются автоматически, информация о них пишется в системные логи |
Язык
Для объявления действия, отправляющего почту, используется оператор EMAIL.
Примеры
FORM remindUserPass
OBJECTS u = CustomUser PANEL
PROPERTIES(u) READONLY login, name[Contact]
;
emailUserPass 'Напоминание логина' (CustomUser user) {
LOCAL bodyFile = FILE ();
PRINT remindUserPass OBJECTS u = user HTML TO bodyFile;
// тело — файл, асинхронная отправка
EMAIL
SUBJECT 'Напоминание логина'
TO email(user)
BODY bodyFile()
NOWAIT
;
}
sendInvoice 'Отправить счёт' (Invoice inv) {
EMAIL
FROM 'sales@company.com'
SUBJECT 'Счёт ' + number(inv)
TO email(customer(inv))
CC 'manager@company.com'
BODY noteText(inv)
// одиночное вложение с заданным именем
ATTACH printInvoice(inv) NAME ('invoice_' + number(inv))
// список вложений: свойства индексированы порядковым номером (одним параметром INTEGER)
ATTACH LIST attachFile[INTEGER] NAME attachFileName[INTEGER]
;
}