通过电子邮件POP3在Trac中打开门票

时间:2015-01-29 16:06:17

标签: pop3 trac ticket-system

我正在寻找一种让人们通过电子邮件打开Trac票的方法。

到目前为止我找到的唯一解决方案是email2trac | https://oss.trac.surfsara.nl/email2trac/wiki此解决方案的问题在于我不想安装&设置邮件服务器。我想要一个侵入性较小的解决方案。

我在考虑一个从POP3帐户下载邮件并通过解析内容来打开/更新票证的cron脚本。

这可能吗?

1 个答案:

答案 0 :(得分:0)

  

我在想一个从POP3下载邮件的cron脚本   通过解析内容来帐户和打开/更新票证。这是   可能?

我认为可能是的。当然,一旦您拥有POP3帐户中的数据,您就可以迭代它并使用Trac API创建/更新票证。

对于数据检索步骤,您可以创建一个新插件,其中Component实现IAdminCommandProvider接口。实际上如何检索和解析数据是一个实现细节供您决定,但您可以使用email / poplib模块并遵循email2trac中的一些解析结构。 / p>

对于一些未经测试的样板来帮助你入门......

from trac.admin import IAdminCommandProvider
from trac.core import Component, implements
from trac.ticket import Ticket

def EmailToTicket(Component):
    implements(IAdminCommandProvider)

    def get_admin_commands(self):
        yield ('emailtoticket retrieve',
               'Retrieve emails from a mail server.'
               None, self._do_retrieve_email)

    def _do_retrieve_email(self):
        # TODO - log into the mail server, then parse data.
        # It would be nice to have a tuple of dictionaries, 
        # with keys like id, summary, description etc

        # iterate over the data and create/update tickets
        for email in emails:
            if 'id' in email: # assuming email is a dictionary
                self._update_ticket(email)
            else:
                self._create_ticket(email)

    def _update_ticket(self, data):
        ticket = Ticket(self.env, data[id])
        for field, value in data.iteritems():
            ticket[field] = value
        ticket.save_changes(author, comment, when)

    def _create_ticket(self, data):
        ticket = Ticket(self.env)
        for field, value in data.iteritems():
            ticket[field] = value
        ticket.insert()

然后你可以让Cron标签通过TracAdmin执行此命令(频率取决于你 - 以下示例每分钟运行一次)

* * * * * trac-admin /path/to/projenv emailtoticket retrieve

了解有关插件开发的更多信息,请阅读this Trac wiki page