Открыть билет по электронной почте POP3 в Trac

Я ищу способ, чтобы люди могли открыть билет Trac по электронной почте.

Единственное решение, которое я нашел, это email2trac | https://oss.trac.surfsara.nl/email2trac/wiki Проблема с этим решением заключается в том, что я не хочу устанавливать и настраивать почтовый сервер. Я хотел бы менее инвазивное решение.

Я думал о скрипте cron, который загружает сообщения из учетной записи POP3 и открывает / обновляет билеты, анализируя содержимое.

Это возможно?

1 ответ

Решение

Я думал о скрипте cron, который загружает сообщения из учетной записи POP3 и открывает / обновляет билеты, анализируя содержимое. Это возможно?

Я думаю, что это было бы возможно, да. Конечно, как только вы получили данные из учетной записи POP3, вы можете перебирать их и создавать / обновлять заявки в соответствии с API Trac.

Для шага поиска данных вы можете создать новый плагин с Component который реализует IAdminCommandProvider интерфейс. То, как вы на самом деле извлекаете и анализируете данные, зависит от вас, но вы, вероятно, могли бы использовать модули email / poplib и следовать некоторой структуре синтаксического анализа из email2trac.

Для некоторых непроверенных шаблонов, чтобы вы начали...

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 tab выполнять эту команду через TracAdmin (частота зависит от вас - приведенный ниже пример запускается каждую минуту)

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

Чтобы узнать больше о разработке плагинов, вы должны прочитать эту вики-страницу Trac.

Другие вопросы по тегам