Перейти к основному содержимому
Версия: 7.0

Отправка почты (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]
;
}