Changeset 194


Ignore:
Timestamp:
02/04/08 11:27:22 (14 years ago)
Author:
bas
Message:

email2trac.py.in, email2trac.conf:

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r192 r194  
    1 2007-XX-XX
     12008-02-04
    22        * Added version check and exit if we do not support the trac version
    33          closes bug #23
     
    2424
    2525          Implemented by: Bas van der Vlies
     26
     27        * greedy matching in Subject line, We must stop after the first ':'
     28          else we get wrong values for ticket fields when we update a ticket
     29          via mail, closes ticket #37
     30          Reported by: dmaziuk at bmrb dot wisc dot edu
     31          Fixed    by: Bas van der Vlies
     32
     33        * added IGNORECASE flag to regular expression for black list. This
     34          is a quick fix, still want to implement this as configuration
     35          option, closed bug #39
     36
     37          Reported By: jodok at lovelysystems dot com
     38          Fixed by   : Bas van der Vlies
     39
     40        * When a known user mails a ticket. We will set the Reporter to
     41          its login name, closes bug #33, #41
     42
     43          Also add configuration option:
     44                ignore_trac_user_settings : 0 (default value)
     45
     46          This option will skip the email address to trac user login name
     47          mapping.
     48
     49          Reported by: anonymous
     50          Fixed by   : Bas van der Vlies
     51
     52       
     53        * SPAM detection was only for new mails not for ticket updates,
     54          closed ticket #44
     55
     56          Reported by: Bas van der Vlies
     57          Fixed by   : Bas van der Vlies
     58         
    2659           
    27602007-07-18
  • trunk/email2trac.conf

    r191 r194  
    1616email_quote: >
    1717strip_quotes: 0
     18ignore_trac_user_settings: 0
    1819
    1920
  • trunk/email2trac.py.in

    r193 r194  
    230230                        self.TMPDIR = os.path.normcase(str(parameters['tmpdir']))
    231231
     232                if parameters.has_key('ignore_trac_user_settings'):
     233                        self.IGNORE_TRAC_USER_SETTINGS = int(parameters['ignore_trac_user_settings'])
     234                else:
     235                        self.IGNORE_TRAC_USER_SETTINGS = 0
    232236
    233237        def spam(self, message):
     
    236240                # Note if Spam_level then '*' are included
    237241                """
     242                spam = False
    238243                if message.has_key('X-Spam-Score'):
    239244                        spam_l = string.split(message['X-Spam-Score'])
     
    241246
    242247                        if number >= self.SPAM_LEVEL:
    243                                 return 'Spam'
    244 
     248                                spam = True
     249                               
    245250                # treat virus mails as spam
    246251                #
    247252                elif message.has_key('X-Virus-found'):                 
     253                        spam = True
     254
     255                # How to handle SPAM messages
     256                #
     257                if self.DROP_SPAM and spam:
     258                        if self.DEBUG > 2 :
     259                                print 'This message is a SPAM. Automatic ticket insertion refused (SPAM level > %d' % self.SPAM_LEVEL
     260
     261                        return True     
     262
     263                elif spam:
     264
    248265                        return 'Spam'
    249266
    250                 return self.get_config('ticket', 'default_component')
     267                else:
     268
     269                        return self.get_config('ticket', 'default_component')
    251270
    252271
     
    254273                FROM_RE = re.compile(r"""
    255274                    MAILER-DAEMON@
    256                     """, re.VERBOSE)
     275                    """, re.VERBOSE|re.IGNORECASE)
    257276                result =  FROM_RE.search(self.email_addr)
    258277                if result:
     
    353372                        ticket['owner'] = None
    354373
    355         def get_author_emailaddrs(self, message):
     374        def get_sender_info(self, message):
    356375                """
    357376                Get the default author name and email address from the message
    358377                """
    359                 temp = self.email_to_unicode(message['from'])
    360                 #print temp.encode('utf-8')
    361 
    362                 self.author, self.email_addr  = email.Utils.parseaddr(temp)
    363                 #print self.author.encode('utf-8', 'replace')
    364 
    365                 # Look for email address in registered trac users
    366                 #
    367                 users = [ u for (u, n, e) in self.env.get_known_users(self.db)
     378
     379                self.email_from = self.email_to_unicode(message['from'])
     380                self.author, self.email_addr  = email.Utils.parseaddr(self.email_from)
     381
     382                # Maybe for later user
     383                #self.email_from =  self.email_to_unicode(self.email_addr)
     384
     385
     386                if self.IGNORE_TRAC_USER_SETTINGS:
     387                        return
     388
     389                # Is this a registered user, use email address as search key:
     390                # result:
     391                #   u : login name
     392                #   n : Name that the user has set in the settings tab
     393                #   e : email address that the user has set in the settings tab
     394                #
     395                users = [ (u,n,e) for (u, n, e) in self.env.get_known_users(self.db)
    368396                                if e == self.email_addr ]
    369397
    370398                if len(users) == 1:
    371                         self.email_from = users[0]
    372                 else:
    373                         self.email_from =  self.email_to_unicode(message['from'])
    374                         #self.email_from =  self.email_to_unicode(self.email_addr)
     399                        self.email_from = users[0][0]
    375400
    376401        def set_reply_fields(self, ticket, message):
     
    513538                TICKET_RE = re.compile(r"""
    514539                                        (?P<ticketnr>[#][0-9]+:)
    515                                         |(?P<ticketnr_fields>[#][\d]+\?.*:)
     540                                        |(?P<ticketnr_fields>[#][\d]+\?.*?:)
    516541                                        """, re.VERBOSE)
    517542
     
    538563
    539564
    540                 # Get current time
    541                 # to do
    542                 #when = int(time.time())
    543                 #
    544                 utc = UTC()
    545                 when = datetime.now(utc)
     565                # When is the change committed
     566                #
     567                #
     568                if self.VERSION == 0.11:
     569                        utc = UTC()
     570                        when = datetime.now(utc)
     571                else:
     572                        when = int(time.time())
    546573
    547574                try:
     
    577604                return True
    578605
    579         def new_ticket(self, msg):
     606        def new_ticket(self, msg, component):
    580607                """
    581608                Create a new ticket
     
    596623                        tkt['summary'] = self.email_to_unicode(msg['Subject'])
    597624
    598 
    599625                if settings.has_key('component'):
    600626                        tkt['component'] = settings['component']
    601627                else:
    602                         tkt['component'] = self.spam(msg)
    603 
    604                 # Discard SPAM messages.
    605                 #
    606                 if self.DROP_SPAM and (tkt['component'] == 'Spam'):
    607                         if self.DEBUG > 2 :
    608                           print 'This message is a SPAM. Automatic ticket insertion refused (SPAM level > %d' % self.SPAM_LEVEL
    609                         return False   
     628                        tkt['component'] = component
    610629
    611630                # Set default owner for component, HvB
     
    680699
    681700                self.db = self.env.get_db_cnx()
    682                 self.get_author_emailaddrs(m)
     701                self.get_sender_info(m)
    683702
    684703                if self.blacklisted_from():
     
    687706                        return False
    688707
     708            # If component is true then we drop the message drop message
     709                #
     710                component =  self.spam(m)
     711                if component == True:
     712                        return False
     713
     714
    689715                if self.get_config('notification', 'smtp_enabled') in ['true']:
    690716                        self.notification = 1
     
    698724                                return True
    699725
    700                 self.new_ticket(m)
     726                self.new_ticket(m, component)
    701727
    702728        def strip_signature(self, text):
Note: See TracChangeset for help on using the changeset viewer.