This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
devel:blueprints:mailin [2009/01/30 09:19] morten created |
devel:blueprints:mailin [2009/01/30 10:43] morten |
||
---|---|---|---|
Line 7: | Line 7: | ||
The University of Tromsø have already started writing a MailIn replacement in Python, and this is up and running at the University, but with only a single plugin. | The University of Tromsø have already started writing a MailIn replacement in Python, and this is up and running at the University, but with only a single plugin. | ||
- | This blueprint specifies the design required to include such a software component in NAV. | + | This blueprint specifies the design required to include such a software component in NAV, and most of is derived from the [[http://drift.uninett.no/~andreas/mailin/|good documentation of the Perl version]]. |
+ | ===== System overview ===== | ||
+ | |||
+ | * The core of MailIn will be a small plugin-invoking engine with a minimal API offered to its plugins. | ||
+ | * The MailIn program will be invoked by an MDA (Mail Delivery Agent), and must expect to be fed an email payload on //stdin//. | ||
+ | * The payload will be offered in turn to each registered plugin. | ||
+ | * Once a plugin accepts the payload, MailIn core will not offer it to any other plugin. | ||
+ | * MailIn core asks the selected plugin to authorize the payload. | ||
+ | * The plugin will check its authorization configuration, to see whether the email is allowed to generate an event. Typically, the headers are inspected to find the source of the email. | ||
+ | * If authorized, MailIn core will ask the plugin to process the payload. | ||
+ | * The plugin will process the payload in whatever manner it sees fit, and using the ''nav.event'' API, one or more events should be generated and posted to the event queue. | ||
+ | |||
+ | ==== Plugin API ==== | ||
+ | A MailIn plugin consists of a Python module, which should provide three functions: | ||
+ | |||
+ | ^ function ^ required ^ description ^ | ||
+ | | ''accept(payload)'' | yes | Must return a true value if the payload can be processed by this plugin. | | ||
+ | | ''authorize(payload)'' | no | Must return a true value if the payload is authorized to generate an event, according to plugin-internal rules/configuration. If this function is not supplied by the plugin, the MailIn core must use a global authorize function to perform authorization according to globally configured rules. | | ||
+ | | ''process(payload)'' | yes | Process the payload, generate and post a single or multiple events. Return a true value if successful. | | ||
+ | |||
+ | The plugin must expect the ''payload'' object to be a message object from [[http://docs.python.org/library/email.html|Python's standard email library]]. |