Краткое описание пакета ng.app.mailfeed
=======================================
Пакет предоставляет каркас для отправки уведомлений по электронной почте.
Пакет позволяет вести список адресов, создавать темплейты писем и
ассоциировать их с почтовыми коннекторами. Письма генерируются по темплейту
для каждого адреса из списка адресов и рассылаются.
            
..  Назначение пакета - легкая конфигурация рассылки
    оповещений с сайта. Оповещение может быть результатом заполнения
    почтовой формы (см. продукт [name:ng.app.mafeed]) или событием,
    возникшем при работе сервера и адаптированном к полям рассылки.


Состав и структура пакета
-------------------------
Пакет определяент интерфейсы трех компонентов: списка адресов, темплейта и
почтового коннектора. Для каждого интерфейса предусмотрен реализующий его
класс, который может быть использован как утилита или как аннотация. Способ
использования компонента определяется интерфейсом, назначенного объекту,
обращающемуся к компонентам: в зависимости от него, при приведении контекста
к интерфейсу будет вызван адаптер утилиты или аннотации. Разработчик,
использующий продукт **ng.app.mailfeed** может написать свой адаптер для
получения компонента реализующего требуемый интерфейс.

Список адресов
~~~~~~~~~~~~~~
Список адресов определяется интерфейсом
**ng.app.mailfeed.addresses.interfaces.IAddresses**. Для обращения к
компоненту нужно привести контекст к этому интерфейсу, например так::

    def getAddress(self) :
        addresses = IAddresses(self)
        
Если контекст предоставляет интерфейс
**ng.app.mailfeed.addresses.interfaces.IAddressesAnnotable**, то компонент
будет взят из аннотации, если интерефейс
**ng.app.mailfeed.addresses.interfaces.IAddressesUtilitable** - будет
вызвана утилита по имени, указанном в атрибуте **addresses** этого
интерфейса.

Для этого интерфейса определена страница редактирования, которая позволяет
ввести список адресов и для каждого адреса указать имя владельца, дату
регистрации и указать флаг активности адреса (если флаг установлен - адрес
используется).

Почтовый темплейт
~~~~~~~~~~~~~~~~~
Почтовый темплейт определяется интерфейсом
**ng.app.mailfeed.mailtemlate.interfaces.IMailTemplate**. Для обращения к
компоненту нужно привести контекст к этому интерфейсу, например так::

    def getMailTemplate(self) :
        mailtemplate = IMailTemplate(self)
        
Если контекст предоставляет интерфейс
**ng.app.mailfeed.mailtemplate.interfaces.IMailTemplateAnnotable**, то
компонент будет взят из аннотации, если интерефейс
**ng.app.mailfeed.mailtemplate.interfaces.IMailTemplateUtilitable** - будет
вызвана утилита по имени, указанном в атрибуте **mailtemplate** этого
интерфейса.

Страница редактирования позволяет ввести шаблон темы и тела письма, кодировку, и
MIME-тип. В текущей версии используется упрощенная реализация почтового
темплейта на основе строки формата python: при генерации письма в шаблонах
производится подстановка соответствующих ключей.

Почтовый коннектор
~~~~~~~~~~~~~~~~~~
Почтовый коннектор определяется интерфейсом
**ng.app.mailfeed.sender.interfaces.ISender**. Для обращения к компоненту
нужно привести контекст к этому интерфейсу, например так::

    def getSender(self) :
        sender = ISender(self)
        
Если контекст предоставляет интерфейс
**ng.app.mailfeed.sender.interfaces.ISenderAnnotable**, то компонент будет
взят из аннотации, если интерефейс
**ng.app.mailfeed.sender.interfaces.ISenderUtilitable** - будет вызвана
утилита по имени, указанном в атрибуте **sender** этого интерфейса.

Страница редактирвания позволяет выбрать один из настроенных агентов
доставки и указать для него исходящий адрес электронной почты.

Компонент IMailFeed
-------------------
Пакет декларирует интерфейс **ng.app.mailfeed.interfaces.IMailFeed**,
определяющий метод **do()**, вызов которого выполняет генерацию письма по
шаблону и его отправку по списку адресов с использованием коннектора. Метод
принимает словарь, значения ключей которого подставляются в темплейт.

В этой версии пакет не предоставляет реализацию этого интерфейса, поэтому ее
должны предоставлять пакеты, использующие **ng.app.mailfeed**.

Заключение
----------
Эта версия продукта оттестирована только для использования вместе с продуктом
[name:ng.app.mailform].