<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.zarafa.com/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.zarafa.com/wiki/index.php?title=Zarafa_dagent/spooler_plugin_howto_and_API_documentation&amp;feed=atom&amp;action=history</id>
		<title>Zarafa dagent/spooler plugin howto and API documentation - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.zarafa.com/wiki/index.php?title=Zarafa_dagent/spooler_plugin_howto_and_API_documentation&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://www.zarafa.com/wiki/index.php?title=Zarafa_dagent/spooler_plugin_howto_and_API_documentation&amp;action=history"/>
		<updated>2013-05-21T20:39:57Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.0</generator>

	<entry>
		<id>http://www.zarafa.com/wiki/index.php?title=Zarafa_dagent/spooler_plugin_howto_and_API_documentation&amp;diff=2094&amp;oldid=prev</id>
		<title>Michel: Created page with &quot;== Introduction ==  ZCP 7.1 offers a new python plugin framework for the Zarafa Spooler and Dagent. This framework makes it easier for advanced system administrators and develope...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.zarafa.com/wiki/index.php?title=Zarafa_dagent/spooler_plugin_howto_and_API_documentation&amp;diff=2094&amp;oldid=prev"/>
				<updated>2012-06-04T14:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Introduction ==  ZCP 7.1 offers a new python plugin framework for the Zarafa Spooler and Dagent. This framework makes it easier for advanced system administrators and develope...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
ZCP 7.1 offers a new python plugin framework for the Zarafa Spooler and Dagent. This framework makes it easier for advanced system administrators and developers to integrate systems with the spooler and dagent. The advanced system administrator and developer can easily add new functionality or change some behaviours of the existing system. The plugin framework is based on the programming language Python which means that you need to create your own hook in python.&lt;br /&gt;
&lt;br /&gt;
This wiki article contains a howto and API documentation. &lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
If the plugin framework in the spooler or dagent is enabled it will search for python files in the directory ''plugin_path'' and look for a specific type of plugin. If the plugins are found it will be verified and loaded. Everytime the spooler or dagent is called it will execute the hooks based on priority. Plugins can validate and change a message on different stages of the spooler and dagent process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Design a new Hook ==&lt;br /&gt;
&lt;br /&gt;
What do you need to know before starting develop python plugins for zarafa dagent and spooler.&lt;br /&gt;
&lt;br /&gt;
* The basics of python&lt;br /&gt;
* Read the zarafa [http://doc.zarafa.com/trunk/Python_Language_Binding/en-US/html-single/ python-mapi] documentation&lt;br /&gt;
&lt;br /&gt;
If you want to do more advanced development with MAPI its recommend to read the Microsofts MAPI documentation on the internet. This described the different properties, interfaces and some examples in C++. It's relative easy to convert the C++ to the python model because python-mapi implements MAPI as it is described by Microsoft but with the Python design rules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you start a new plugin you need atleast the following headers in the new plugin.&lt;br /&gt;
&lt;br /&gt;
Plugin default imports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import MAPI&lt;br /&gt;
from MAPI.Util import *&lt;br /&gt;
from MAPI.Time import *&lt;br /&gt;
from MAPI.Struct import *&lt;br /&gt;
&lt;br /&gt;
from plugintemplates import *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Creating a Plugin for the Dagent ===&lt;br /&gt;
&lt;br /&gt;
To create a new plugin in the dagent the plugin must inherent from the class IMapiDAgentPlugin. This class has the following functions which can be override.&lt;br /&gt;
{| style=&amp;quot;border-collapse: collapse; border-width: 1px; border-style: solid; border-color: #000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px &amp;quot;| Function name&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; align=&amp;quot;left&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | PostConverting&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Hook direct after the convert from rfc822 to MAPI&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | PreDelivery&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Hook before delivery (per reciepient)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | PreRuleProcess&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Hook in to the MAPI rules, to add, modify or remove user rules&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | PostDelivery&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Hook after delivery (per reciepient)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | SendNewMailNotify&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Hook to report the end-user if there is a new mail or not&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The zarafa dagent need to extend from the plugin class 'IMapiDAgentPlugin' and override one or more functions of the class.&lt;br /&gt;
&lt;br /&gt;
Example which log the subject of a email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;class MyDagentPlugin(IMapiDAgentPlugin):&lt;br /&gt;
&lt;br /&gt;
    def PostConverting(self, session, addrbook, store, folder, message):&lt;br /&gt;
        props = message.GetProps([PR_SUBJECT], 0)&lt;br /&gt;
        self.logger.logInfo(&amp;quot;My dagent test, the subject is '%s'&amp;quot; % props[0].Value)&lt;br /&gt;
&lt;br /&gt;
        return MP_CONTINUE,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating a Plugin for the Spooler ===&lt;br /&gt;
&lt;br /&gt;
To create a new plugin in the spooler the plugin must inherent from the class IMapiSpoolerPlugin. This class has the following functions which can be override.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-collapse: collapse; border-width: 1px; border-style: solid; border-color: #000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px &amp;quot;| Function name&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; align=&amp;quot;left&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot;| PreSending&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot;| Hook before sending a MAPI message as a rfc822 mail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Zarafa spooler must be extend from the plugin class 'IMapiSpoolerPlugin' and override one or more functions of the class.&lt;br /&gt;
&lt;br /&gt;
Example which log the subject of a email:&lt;br /&gt;
&amp;lt;pre&amp;gt;class MySpoolerPlugin(IMapiSpoolerPlugin):&lt;br /&gt;
&lt;br /&gt;
    def PreSending(self, session, addrbook, store, folder, message):&lt;br /&gt;
        props = message.GetProps([PR_SUBJECT], 0)&lt;br /&gt;
        self.logger.logInfo(&amp;quot;My spooler test, the subject is: '%s'&amp;quot; % props[0].Value)&lt;br /&gt;
&lt;br /&gt;
        return MP_CONTINUE,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Priority of a plugin ===&lt;br /&gt;
&lt;br /&gt;
Every plugin hook can have a priority which have by default the priority 9999. To change the priority of a hook you need to add an attribute prio&amp;lt;hookname&amp;gt; with the value as priority, for example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyDagentPlugin(IMapiDAgentPlugin):&lt;br /&gt;
	prioPostConverting = 10&lt;br /&gt;
&lt;br /&gt;
	def PostConverting(self, session, addrbook, store, folder, message):&lt;br /&gt;
		DoSomeThing()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log system ===&lt;br /&gt;
&lt;br /&gt;
The python plugin framework has an internal log system which forward the log information to the Zarafa spooler and Zarafa dagent log. The logger has the following log functions:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-collapse: collapse; border-width: 1px; border-style: solid; border-color: #000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px &amp;quot;| Function name&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px &amp;quot;| level&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; align=&amp;quot;left&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logFatal&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | An (unhandleable) error that results in a hook 'crash'&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logError&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | A handleable error but needs attention&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logWarn&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | A warning&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logNotice&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Generic information about plugin operation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logInfo&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Detailed information about plugin operation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | logDebug&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Low-level information for developers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example log:&lt;br /&gt;
&lt;br /&gt;
 self.logger.logFatal(&amp;quot;Unable to find file '%s'&amp;quot; % (filename) )&lt;br /&gt;
 self.logger.logInfo(&amp;quot;Message includes %d attachment(s)&amp;quot; % (cntattach) )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= API documentation =&lt;br /&gt;
&lt;br /&gt;
== Dagent api class IMapiDAgentPlugin ==&lt;br /&gt;
&lt;br /&gt;
'''Attributes'''&lt;br /&gt;
&lt;br /&gt;
'''prioPostConverting'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the PostConverting call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
'''prioPreDelivery'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the PreDelivery call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
'''prioPostDelivery'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the PostDelivery call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
'''prioPreRuleProcess'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the PreRuleProcess call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
'''prioSendNewMailNotify'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the SendNewMailNotify call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Functions'''&lt;br /&gt;
&lt;br /&gt;
Hook direct after the convert from rfc822 to MAPI &lt;br /&gt;
&lt;br /&gt;
 def PostConverting(self, session, addrbook, store, folder, message)&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook before delivery (per reciepient)&lt;br /&gt;
&lt;br /&gt;
 def PreDelivery(self, session, addrbook, store, folder, message)&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook after delivery (per reciepient)&lt;br /&gt;
&lt;br /&gt;
 def PostDelivery(self, session, addrbook, store, folder, message)&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook in to the MAPI rules, to add, modify or remove user rules&lt;br /&gt;
&lt;br /&gt;
 def PreRuleProcess(self, session, addrbook, store, rulestable)&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook to report the end-user if there is a new mail or not.&lt;br /&gt;
&lt;br /&gt;
 def SendNewMailNotify(self, session, addrbook, store, folder, message)&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Return values ===&lt;br /&gt;
&lt;br /&gt;
The return codes for the dagent plugin.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-collapse: collapse; border-width: 1px; border-style: solid; border-color: #000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px &amp;quot;| Exit code&lt;br /&gt;
! style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; align=&amp;quot;left&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_CONTINUE&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Continue to the next hook&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_FAILED&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Whole process failed&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_STOP_SUCCESS&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Stop with the message processing go to the next recipient. Recpient return code OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_STOP_FAILED&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Stop with the message processing go to the next recipient. Recpient return code failed&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_EXIT&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Break all the hook calls and go futher with the mail process&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | MP_RETRY_LATER&lt;br /&gt;
| style=&amp;quot;border-style: solid; border-width: 1px&amp;quot; | Stop Process and retry later&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spooler api class IMapiSpoolerPlugin ==&lt;br /&gt;
&lt;br /&gt;
'''Attributes'''&lt;br /&gt;
&lt;br /&gt;
'''prioPreSending'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The priority of the PreSending call. Default 9999&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook before sending a MAPI message as a rfc822 mail&lt;br /&gt;
&lt;br /&gt;
 def PreSending(self, session, addrbook, store, folder, message):&lt;br /&gt;
&lt;br /&gt;
'''session'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The current MAPI session&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''addrbook'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The addressbook of the user&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''store'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The users mailbox where the email will be deliverd&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''folder'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The Folder where the email is created&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''message'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The actual message which will be deliverd in the mailbox&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michel</name></author>	</entry>

	</feed>