Mailsender

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Общие сведения

Mодуль mailsender, расположенный в грануле common, предназначен для быстрой реализации функционала почтовых рассылок «роботом», работающим на базе заданий системы Flute. Для сбора почтовых сообщений предназначен модуль Mailreader. Запуск mailsender должен осуществляться из Flute вызовом процедуры common.mailsender.sendmail.

Основное назначение mailsender — быстрая и грубая реализация формирования plain-text писем, текст которых создаётся на базе txt-шаблона предопределённого формата, наполняемого данными из XML-файла предопределённого формата. Mailsender хорош в проектах, где предусмотрено разнообразное автоматическое email-информирование пользователей.

В настоящий момент mailsender-ом не поддерживаются: вложения (как заранее предоставленные, так и формируемые на базе XML-файла при помощи Xml2spreadsheet), HTML-форматирование, сложная структура представления данных (вложенные списки, таблицы и проч.) Для решения этих задач по-прежнему открыта возможность написания кастомного Python-скрипта для Flute :-)

Доступ к smtp-серверу и «обратный адрес» настраиваются в соответствующем тэге файла grainssettings.xml, который имеет следующий вид:

<mailsender>
   <!--путь к текстовым шаблонам-->
   <templatespath>C:/data/templates/</templatespath>
   <!--обратный адрес (от имени кого будет идти рассылка) -- см. замечание ниже!-->
   <mailfrom>openiformer@rambler.ru</mailfrom>
   <!--Адрес SMTP-сервера -->
   <smtphost>81.19.70.48</smtphost>
   <!--Порт SMTP-сервера, пустое значение -- по умолчанию, 25 -->				
   <port></port>
   <!--Нужна ли аутентификация на SMTP-сервер-->
   <isauth>True</isauth>
   <!--Логин и пароль на SMTP-сервер (если требуется аутентификация)-->
   <login>openiformer</login>				
   <password>a!2P9^1</password>
</mailsender>
Важная информация
Во избежание лавинообразной генерации сообщений, запрещено использовать в качестве обратного адреса модуля mailsender ящик, к которому подключен модуль mailreader. Рекомендовано в качестве обратного адреса указывать несуществующий ящик с «говорящим» о бесполезности отсылки на него почты именем, например, noreply@<домен>.ru

Двумя основными сущностями для работы mailsender являются XML-файл данных (передаваемый скрипту mailsender в качестве параметра) и шаблон письма.

XML-файл данных

Это файл, корневой элемент которого всегда <letter> и состоит из двух разделов:

  • <header>, в котором прописана связь с шаблоном и получатели письма,
  • и <body>, в котором прописываются данные, предназначенные для наполнения письма.

Данные должны представляться в предопределённом жёстком формате: все они хранятся в именованных тэгах <field>.

Для циклически повторяющихся блоков (перечней) предназначены тэги <repeat>.

Пример заполнения такого файла см. ниже.

Шаблон

Шаблон представляет собой plain-text-файл, в котором вставлены ссылки на поля и управляющие тэги. Управляющие тэги представляют собой идущие в начале строки написанные заглавными буквами ключевые слова с двоеточием на конце.

Поддерживаются следующие тэги:

  • Общие тэги:
    • REM: -- комментарий, всё содержимое строчки, следующее за REM:, игнорируется
    • SUBJECT: --- формирует заголовок письма
  • Перечни:
    • REPEAT(имяцикла): -- начинает перечень, значение в скобках -- имя перечня
    • EMPTY: -- начинает блок, который будет выводиться в случае, если перечень --- пуст
    • END: -- заканчивает блок перечня

Допустимы перечни как в виде REPEAT-EMPTY-END, так и просто в виде REPEAT-END.

  • Условные блоки:
    • IFDEF(поле): --- начинает условный блок, который будет выводиться, если поле, указанное в скобках, определено в XML-файле
    • ELSE: --- начинает блок, который будет выводиться, если соответствующее поле НЕ определено в XML-файле
    • END: -- заканчивает условный блок.

Допустимы условные блоки как в виде IFDEF-ELSE-END, так и просто в виде IFDEF-END.

Пример

XML-файл:

<letter>
    <header>
        <template>template3.txt</template><!-- Имя шаблона -->
        <to>iponomarev@mail.ru</to> <!-- Далеее идёт любая комбинация тэгов to и cc, в которых перечислены получатели -->
        <cc>informer@rambler.ru</cc>
    </header>
    <body>
        <field name="id">1123</field> <!-- id сообщения -->
        <field name="uid">1123</field> <!-- сквозной номер сообщения -->
        <field name="datecreated">2012-01-01</field>
        <repeat id="attachments"> <!-- В данном примере повторяющийся блок состоит всего из одного-единственного поля, поэтому код кажется избыточным.
        однако, в каждом тэге repeat может быть определено сколько угодно полей, а также - потенциально - другие тэги repeat...-->
            <field name="attachment">foo.doc</field>
        </repeat>
        <repeat id="attachments">
            <field name="attachment">bar.doc</field>
        </repeat>
        <field name="url">http://www.yandex.ru</field>
    </body>
</letter>

Шаблон:

REM: управляющий тэг REM служит для ввода всякого рода описаний (например, 
REM: рассказа про то, когда рассылаются письма по данному шаблону). 
REM: вся информация, идущая в строке после двоеточия, игнорируется.

SUBJECT: Обращение %(id)s добавлено через интерфейс системы
REM: управляющий тэг SUBJECT служит для формирования строки темы письма
REM: как и везде

Уважаемые коллеги,

в систему добавлено новое обращение:


cистемный номер: %(id)s;
cквозной номер: %(uid)s;
дата регистрации обращения: %(datecreated)s.

Прикреплённые файлы:

REPEAT(attachments):
%(attachment)s
END:

REPEAT(emptyblock):
  ляля тополя %(attachment)s
EMPTY:
  А этот вот блок указывает на то, что репитов не было.
END:

IFDEF(url):
  Определён тэг url, 
  Ссылка: %(url)s
ELSE:
  А этот текст не будет виден.  
END:

IFDEF(urllll):
И этот не будет виден
ELSE:
  А этот текст обязательно будет виден -- это ifndef
END:
Ссылка: %(url)s