Google Apps + Trac Integration Using email2trac

I have been using Trac for viewing my Subversion source repository and some ticketing, however I wanted to be able to integrate email directly to the ticketing system. The second part of my setup is the use of Google Apps to host our mail domain, so the easiest way to set this up was to create a new user (trac@example.com / p@ssword in the example below).

My development server is running CentOS 5.8, Trac 0.12, and python2.7 (although the site-packages for CentOS are still in /var/lib/python2.4/site-packages. Because of this it was necessary to add the PYTHONPATH to the environment when calling email2trac.

The installation instructions for email2trac can be found on its homepage here, or here’s the quick version:

cd ~
wget ftp://ftp.sara.nl/pub/outgoing/email2trac.tar.gz
tar xvf email2trac.tar.gz
cd email2trac-*
./configure
make
make install

The configuration information for email2trac is located in /usr/local/etc/email2trac.conf. I made a few changes to the default configuration as you can see below, or check out the default configuration.

[DEFAULT]
project: /var/trac/project
debug: 0 
black_list: MAILER-DAEMON@
drop_spam : 1
drop_alternative_html_version: 1
email_quote: >
html2text_cmd:
ignore_trac_user_settings: 0
inline_properties: 1
reply_all : 0
spam_level: 5
strip_quotes: 1
strip_signature: 1
ticket_update: 1
ticket_update_by_subject: 1
umask: 022
verbatim_format: 1

[other_project]
project: /var/trac/other_project

On my system I also needed to do a custom build of MySQL-python to get it into the proper PYTHONPATH. With my default python set to 2.7, I ran the following:

cd ~
yum install php-imap python-devel mysql-devel
wget http://sourceforge.net/projects/mysql-python/files/latest/download
cd MySQL-python*
python setup.py install

Note that above on my system I actually only installed mysql-devel.x86_64 due to a conflict in the i386 version.

Next I used the following PHP script to import message from the Trac Google Apps user and process them into Trac one at a time. Due to the different environment I had to set the PYTHONPATH using putenv() so that email2trac would run. This file was saved as /var/trac/gmail2trac.php.

<?php
// Connect to the Google Apps / Gmail account
$mailbox = imap_open("{imap.googlemail.com:993/ssl}INBOX", "trac@example.com", "p@ssword");
// Get all unread emails
$mail = imap_search($mailbox, "UNSEEN");
if ( !empty($mail) ){
        // This is required on CentOS to find the Trac egg
        putenv("PYTHONPATH=/usr/lib/python2.4/site-packages");
        // Process each email
        foreach ($mail as $id){
                // Save the email contents to a temp file
                imap_savebody($mailbox, '/tmp/gmail2trac.txt', $id);
                // Import into Trac via email2trac
                system('/usr/local/bin/email2trac -f /usr/local/etc/email2trac.conf -p project < /tmp/gmail2trac.txt');
                // Mark as read
                imap_setflag_full($mailbox, $id, "\\Seen");
        }
}
// Close connection
imap_close($mailbox);
?>

Note that if you want to reprocess any emails, all you need to do is log in as the Trac user and mark the message as unread.

Lastly to import on a schedule – I opted for a check every 5 minutes – just setup a cron job via crontab -e.

*/5 * * * * php /var/trac/gmail2trac.php

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *