blob: 1f05d2cffe9f5591562ff2d09ad782c43a787a0b [file] [log] [blame]
#!/usr/bin/python
"""
emailfilter.py -- Email tickets to Trac.
A simple MTA filter to create Trac tickets from inbound emails.
Copyright 2005, Daniel Lundin <daniel@edgewall.com>
Copyright 2005, Edgewall Software
Please note:
This is only a starting point. See
* http://trac.edgewall.org/ticket/5327 and
* http://trac-hacks.org/intertrac/EmailtoTracScript
for more complete and advanced examples.
The scripts reads emails from stdin and inserts directly into a Trac database.
MIME headers are mapped as follows:
* From: => Reporter
* Subject: => Summary
* Body => Description
How to use
----------
* Set TRAC_ENV_PATH to the path of your project's Trac environment
* Configure script as a mail (pipe) filter with your MTA
typically, this involves adding a line like this to /etc/aliases:
somename: |/path/to/email2trac.py
Check your MTA's documentation for specifics.
Todo
----
* Configure target database through env variable?
* Handle/discard HTML parts
* Attachment support
"""
TRAC_ENV_PATH = '/var/trac/test'
import email
import sys
from trac.env import Environment
from trac.ticket import Ticket
class TicketEmailParser(object):
env = None
def __init__(self, env):
self.env = env
def parse(self, fp):
msg = email.message_from_file(fp)
tkt = Ticket(self.env)
tkt['status'] = 'new'
tkt['reporter'] = msg['from']
tkt['summary'] = msg['subject']
for part in msg.walk():
if part.get_content_type() == 'text/plain':
tkt['description'] = part.get_payload(decode=1).strip()
if tkt.values.get('description'):
tkt.insert()
if __name__ == '__main__':
env = Environment(TRAC_ENV_PATH, create=0)
tktparser = TicketEmailParser(env)
tktparser.parse(sys.stdin)