No to long ago I proposed an experimental extension to the IMAP protocol to allow IMAP to execute extername server side code and talk to email plugins to create custom client/server applications over an existing authenticated IMAP connection. I am happy to say they we have working code. It's not quite ready to download yet but we do have some life happening. I have started to document it on the Dovecot wiki here.
http://wiki.dovecot.org/Plugins/xexec
I'm looking to see if I can generate some interest in this.
XEXEC Plugin
XEXEC is an experimental non-standard extension to the IMAP protocol that allows you to run and server side application and have it communicate with email plugins (Thunderbird) allowing custom client/server applications to communicate over an existing authenticated IMAP channel. The email client sends the XEXEC command with the name of the server side module that it wishes to run along with parameters to pass to the server. Here are some examples:
XEXEC blacklist add joe@example.com XEXEC whitelist del joe@example.com XEXEC changepassword MyNewPassword XEXEC forwardmail myaccount@yahoo.com
Uses for XEXEC
The XEXEC can be used to run anything but in theory it should be used for client server applications that relate to email or groupware applications like calendars and contact lists. Its main purpose is to allow email clients to set server side settings over the existing authenticated channel without having the user have to log in separately using a different application to control user settings. Examples of possible usage includes:
* Setting server side white lists and black lists
* Changing the password for the email account
* Allowing users to set email forwarding preferences
* Allowing users to set vacation messages
* Allowing users to exclude email from specific countries or
language character sets
* Allowing users to control server side spam filter settings
* Server Side Calendar and Group Contact Applications like MS
Exchange has
* SMTP over IMAP for sending outgoing email without separate SMTP
settings
* Setting rules for server side folder delivery.
* Setting text message alerts to cell phones for important email
notification
Wouldn't it be nice if you could change your email password i your email client and have it set the new password on the server at the same time? This would eliminate the need to change the server and client passwords separately. Or imagine sending outgoing email without having to configure SMTP. You just set up the incoming email and the outgoing email works as well. Or wouldn't you like to do some of the fancy tricks that Microsoft Exchange Servers do without having to use Exchange? It is our hope that this experimental protocol will lead to significant expansion of IMAP functionality.
About this Plugin
This plugin is the idea of Marc Perkel of Junk Email Filter http://www.junkemailfilter.com who hired Nicolas Boullis ( nicolas.boullis@free.fr mailto:nicolas.boullis@free.fr) to write the code. I (Marc Perkel marc@perkel.com mailto:marc@perkel.com) am trying to get the concept out there in some sort of working form with the idea that it will catch on. Hopefully other people who find this concept useful will build on the idea, do it right, and perhaps some variation of this concept will eventually become a standard.
Status
This plugin is a nonstandard experimental extension to the IMAP protocol. It is offered as a proof of concept and it is my hope that it will catch on in some form and make it into the IMAP officially. At this point there is nothing on the client side to talk to anything on the server side. So this code is presently useless until more development is done.
Configuration
To activate and configure this plugin you have to first add it to your dovecot.conf file. You can do so as follows:
protocol imap { mail_plugins = xexec }
Then to add applications you specify the module name and map it to a server side executable program.
xexec = module:executable
Here are some examples:
plugin { xexec = blacklist:/usr/local/dovecot/blacklist.sh %u xexec2 = whitelist:/usr/local/dovecot/whitelist.sh %u xexec3 = average:/usr/local/dovecot/average xexec4 = smtp:/usr/local/dovecot/smtp }
The idea is that the module name will be a reference to an executable and will hide what is happening on the server. When the command XEXEC module <parameters> is passed then the server will run the executable and pass the parameters to the executable.
Interacting with XEXEC
A typical session with XEXEC might look like this.
- OK Dovecot ready. 001 login marc@perkel.com password 001 OK Logged in. 002 xexec blacklist add joe@example.com
- OK Adding joe@example.com to server side blacklist for marc@perkel.com 002 OK command exited successfully 003 xexec changepassword MyNewPassword
- OK New Password set Sucessfully for marc@perkel.com 003 OK command exited successfully
Many of the details of how everything will work under different conditions have yet to be developed.
Download and Installation
Coming Soon!
License
This software and the concepts behind is are free. No patent or copyrights are asserted on the concept. This is a gift to the world community. Code is released under GPL2.
Help Needed
We could use some help with this project. We haven't even started writing any client side code. We are looking for sharp people with good ideas to help develop this concept in a way that will eventually lead to becoming part of the standard. We envision that certian commands to do ordinary universal stuff (password, smpt, whit list, black list, forwarding) will become standardized so that features to set server side settings can become part of standard email applications.