My procmail mailing list does not require any modification to XWiki.  It
uses the existing capability of the mail plug-in to display messages
from an IMAP store. When messages arrive, I chose to access the database
directly using JDBC rather than invoke something like "wget
http://www.mywiki.com/..." for performance and reliability. I have seen
other people are interested in how to access the database from outside
of XWiki, so maybe this would be a useful example.
The command line java program is invoked with this shell script:
 #!/bin/sh
 java -cp
/usr/local/tomcat/common/lib/mysql-connector-java-3.1.7-bin.jar:. \
    XWikiMail $1 $2 $3 $4
The command-line java program:
//
// A command-line program to extract the list of email addresses for an
XWiki Group.
// Trevor Cox
// Nov 9, 2005
// 
www.skahasoftware.com
//
import java.net.*;
import java.io.*;
import java.util.*;
import java.sql.*;
public class XWikiMail {
    public XWikiMail() {}
    public static void main(String[] params)
        throws java.lang.Exception
    {
        if(params.length != 2) {
            System.out.println(
                "Usage: xwikimail <database> <group>\n");
                throw new java.lang.Exception("Incorrect parameters");
        }
        String site=params[0];
        String group=params[1];
        String url   = "jdbc:mysql://localhost/" + site;
        String dbuser = "xwiki";
        String dbpwd =  "xwiki";
        String query =
            "select xws_value from xwikiobjects join xwikistrings on
xwo_id=xws_id "
            + " where xwo_name='XWiki." + group + "' and "
            + " xwo_classname='XWiki.XWikiGroups';";
        Class.forName  ("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, dbuser, dbpwd);
        Statement stmt = con.createStatement ();
        ResultSet rs = stmt.executeQuery (query);
        while ( rs.next() ) {
            String member = rs.getString(1);
            String query2 =
        "select xws_value from xwikiobjects join xwikistrings on xwo_id
= xws_id"
        + " where xwo_name='" + member + "' and
xwo_classname='XWiki.XWikiUsers' and"
        + " xws_name='email';";
            Statement stmt2 = con.createStatement ();
            ResultSet rs2 = stmt2.executeQuery (query2);
            while ( rs2.next() ) {
                System.out.print(rs2.getString(1)+" ");
            }
        }
        rs.close();
        stmt.close();
        con.close();
    }
}
Here's a procmail rule that distributes mail sent to the mailing list
<group>(a)<wiki>.xwiki.com (I've simplified my original script for clarity).
:0
* ^(To|Cc):.*\/[a-z]+@[a-z]+\.xwiki\.com
{
        GROUP=`echo $MATCH | sed s/@.*//`
        SITE=`echo $MATCH | perl -pe "s/.*(a)([^\.]*).*/\1/;"`
        XWIKISENDMAIL=`xwikimail $SITE $GROUP`
        :0 c
        $SITE.$GROUP           # Store messages in folder like
mywiki.mygroup
        :0
        ! $XWIKISENDMAIL
}
Trevor Cox
Skaha Software
jeremi joslin wrote:
  Hi,
 Nice, can you send us also a diff with your modification on the mail
 plugin. Can we integrate them in Xwiki?
 Jeremi
 On 7/17/06, Trevor Cox <xwiki(a)skahasoftware.com> wrote:
  I have integrated a mailing list with XWiki. The
mailing list is built
 with procmail, which invokes a command line Java program to extract the
 email addresses from the XWiki database and forward each message. All
 the emails are archived in a IMAP folder which is viewed by this
 template code:
 <h3 class="heading-1">Mail Archive</h3>
 #set($user = "xxx")
 #set($pass = "xxx")
 #set($fldr = "${context.database}.listname")
 #set($store = $xwiki.mail.getStore("imap"))
 $store.connect("localhost", $user, $pass)
 #set($fldr = $store.getFolder($fldr))
 $fldr.open(1)
 #set($msgnum = $parameterParser.getInt("msg",0))
 #if($msgnum != 0)
 <a href="?">Message Index</a>
 \\
 #set($mail = $fldr.getMessage($msgnum))
 From:
 #foreach($from in $mail.getHeader("from"))
 $xwiki.getFormEncoded($from) #end
 \\
 To:
 #foreach($from in $mail.getHeader("to")) $xwiki.getFormEncoded($from)
 #end
 \\
 Subject: $xwiki.getFormEncoded($mail.subject) \\
 Message:
  #if($mail.isMimeType("text/plain") || $mail.isMimeType("text/html"))
   $mail.getContent()
  #else
   (Unable to display)
  #end
 #else
 The following mail was sent to the list
 during the past year:
 #set($count = $fldr.messageCount)
 Showing $count of $count messages:
 <table class="wiki-table" cellpadding="0"
cellspacing="0" border="0">
 <tr class="table-odd">
 <th>Subject</th><th>From</th><th>Date</th>
 </tr>
 #foreach ($i in [$fldr.messageCount..1])
 #set($mail = $fldr.getMessage($i))
 <tr>
 <td>
 <a
href="?msg=$mail.getMessageNumber()">$xwiki.getFormEncoded($mail.subject)</a>
 </td><td>
 #set($froms = $mail.getHeader("from"))
 #foreach($from in $froms) $xwiki.getFormEncoded($from) #end
 </td><td>
 #if($!mail.sentDate)
 $formatter.formatShortDateTime($!mail.sentDate)
 #end
 </td>
 </tr>
 #end
 </table>
 #end
 $store.close()
 Adrian Hall wrote:
  Would you care to share the code?
 Thanks,
 -Adrian
 
 --
 Trevor Cox
 
skahasoftware.com
 Vancouver, Canada
 --
 You receive this message as a subscriber of the
 xwiki-users(a)objectweb.org mailing list.
 To unsubscribe: mailto:xwiki-users-unsubscribe@objectweb.org
 For general help: mailto:sympa@objectweb.org?subject=help
 ObjectWeb mailing lists service home page: 
http://www.objectweb.org/wws
 
------------------------------------------------------------------------
--
You receive this message as a subscriber of the xwiki-users(a)objectweb.org mailing list.
To unsubscribe: mailto:xwiki-users-unsubscribe@objectweb.org
For general help: mailto:sympa@objectweb.org?subject=help
ObjectWeb mailing lists service home page: 
http://www.objectweb.org/wws
 
--
Trevor Cox
skahasoftware.com
Vancouver, Canada