Changeset 310


Ignore:
Timestamp:
02/02/10 16:53:43 (14 years ago)
Author:
bas
Message:

rearranged some code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/email2trac.py.in

    r309 r310  
    375375                return s
    376376
     377
     378        def email_header_txt(self, m):
     379                """
     380                Display To and CC addresses in description field
     381                """
     382                s = ''
     383                #if m['To'] and len(m['To']) > 0 and m['To'] != 'hic@sara.nl':
     384                if m['To'] and len(m['To']) > 0:
     385                        s = "'''To:''' %s\r\n" %(m['To'])
     386                if m['Cc'] and len(m['Cc']) > 0:
     387                        s = "%s'''Cc:''' %s\r\n" % (s, m['Cc'])
     388
     389                return  self.email_to_unicode(s)
     390
     391
     392        def get_sender_info(self, message):
     393                """
     394                Get the default author name and email address from the message
     395                """
     396
     397                self.email_to = self.email_to_unicode(message['to'])
     398                self.to_name, self.to_email_addr = email.Utils.parseaddr (self.email_to)
     399
     400                self.email_from = self.email_to_unicode(message['from'])
     401                self.email_name, self.email_addr  = email.Utils.parseaddr(self.email_from)
     402
     403                ## Trac can not handle author's name that contains spaces
     404                #  and forbid the ticket email address as author field
     405
     406                if self.email_addr == self.trac_smtp_from:
     407                        self.author = "email2trac"
     408                else:
     409                        self.author = self.email_addr
     410
     411                if self.IGNORE_TRAC_USER_SETTINGS:
     412                        return
     413
     414                # Is this a registered user, use email address as search key:
     415                # result:
     416                #   u : login name
     417                #   n : Name that the user has set in the settings tab
     418                #   e : email address that the user has set in the settings tab
     419                #
     420                users = [ (u,n,e) for (u, n, e) in self.env.get_known_users(self.db)
     421                        if e and (e.lower() == self.email_addr.lower()) ]
     422
     423                if len(users) == 1:
     424                        self.email_from = users[0][0]
     425                        self.author = users[0][0]
     426
     427        def set_reply_fields(self, ticket, message):
     428                """
     429                Set all the right fields for a new ticket
     430                """
     431                if self.DEBUG:
     432                        print 'TD: set_reply_fields'
     433
     434                ## Only use name or email adress
     435                #ticket['reporter'] = self.email_from
     436                ticket['reporter'] = self.author
     437
     438
     439                # Put all CC-addresses in ticket CC field
     440                #
     441                if self.REPLY_ALL:
     442
     443                        email_cc = ''
     444
     445                        cc_addrs = email.Utils.getaddresses( message.get_all('cc', []) )
     446
     447                        if not cc_addrs:
     448                                return
     449
     450                        ## Build a list of forbidden CC addresses
     451                        #
     452                        #to_addrs = email.Utils.getaddresses( message.get_all('to', []) )
     453                        #to_list = list()
     454                        #for n,e in to_addrs:
     455                        #       to_list.append(e)
     456                               
     457                        # Remove reporter email address if notification is
     458                        # on
     459                        #
     460                        if self.notification:
     461                                try:
     462                                        cc_addrs.remove((self.author, self.email_addr))
     463                                except ValueError, detail:
     464                                        pass
     465
     466                        for name,addr in cc_addrs:
     467               
     468                                ## Prevent mail loop
     469                                #
     470                                #if addr in to_list:
     471
     472                                if addr == self.trac_smtp_from:
     473                                        if self.DEBUG:
     474                                                print "Skipping %s mail address for CC-field" %(addr)
     475                                        continue
     476
     477                                if email_cc:
     478                                        email_cc = '%s, %s' %(email_cc, addr)
     479                                else:
     480                                        email_cc = addr
     481
     482                        if email_cc:
     483                                if self.DEBUG:
     484                                        print 'TD: set_reply_fields: %s' %email_cc
     485
     486                                ticket['cc'] = self.email_to_unicode(email_cc)
     487
    377488        def debug_body(self, message_body, tempfile=False):
    378489                if tempfile:
     
    423534                        except OSError:
    424535                                pass
    425 
    426         def email_header_txt(self, m):
    427                 """
    428                 Display To and CC addresses in description field
    429                 """
    430                 s = ''
    431                 #if m['To'] and len(m['To']) > 0 and m['To'] != 'hic@sara.nl':
    432                 if m['To'] and len(m['To']) > 0:
    433                         s = "'''To:''' %s\r\n" %(m['To'])
    434                 if m['Cc'] and len(m['Cc']) > 0:
    435                         s = "%s'''Cc:''' %s\r\n" % (s, m['Cc'])
    436 
    437                 return  self.email_to_unicode(s)
    438 
    439 
    440         def get_sender_info(self, message):
    441                 """
    442                 Get the default author name and email address from the message
    443                 """
    444 
    445                 self.email_to = self.email_to_unicode(message['to'])
    446                 self.to_name, self.to_email_addr = email.Utils.parseaddr (self.email_to)
    447 
    448                 self.email_from = self.email_to_unicode(message['from'])
    449                 self.email_name, self.email_addr  = email.Utils.parseaddr(self.email_from)
    450 
    451                 ## Trac can not handle author's name that contains spaces
    452                 #  and forbid the ticket email address as author field
    453 
    454                 if self.email_addr == self.trac_smtp_from:
    455                         self.author = "email2trac"
    456                 else:
    457                         self.author = self.email_addr
    458 
    459                 if self.IGNORE_TRAC_USER_SETTINGS:
    460                         return
    461 
    462                 # Is this a registered user, use email address as search key:
    463                 # result:
    464                 #   u : login name
    465                 #   n : Name that the user has set in the settings tab
    466                 #   e : email address that the user has set in the settings tab
    467                 #
    468                 users = [ (u,n,e) for (u, n, e) in self.env.get_known_users(self.db)
    469                         if e and (e.lower() == self.email_addr.lower()) ]
    470 
    471                 if len(users) == 1:
    472                         self.email_from = users[0][0]
    473                         self.author = users[0][0]
    474 
    475         def set_reply_fields(self, ticket, message):
    476                 """
    477                 Set all the right fields for a new ticket
    478                 """
    479                 if self.DEBUG:
    480                         print 'TD: set_reply_fields'
    481 
    482                 ## Only use name or email adress
    483                 #ticket['reporter'] = self.email_from
    484                 ticket['reporter'] = self.author
    485 
    486 
    487                 # Put all CC-addresses in ticket CC field
    488                 #
    489                 if self.REPLY_ALL:
    490 
    491                         email_cc = ''
    492 
    493                         cc_addrs = email.Utils.getaddresses( message.get_all('cc', []) )
    494 
    495                         if not cc_addrs:
    496                                 return
    497 
    498                         ## Build a list of forbidden CC addresses
    499                         #
    500                         #to_addrs = email.Utils.getaddresses( message.get_all('to', []) )
    501                         #to_list = list()
    502                         #for n,e in to_addrs:
    503                         #       to_list.append(e)
    504                                
    505                         # Remove reporter email address if notification is
    506                         # on
    507                         #
    508                         if self.notification:
    509                                 try:
    510                                         cc_addrs.remove((self.author, self.email_addr))
    511                                 except ValueError, detail:
    512                                         pass
    513 
    514                         for name,addr in cc_addrs:
    515                
    516                                 ## Prevent mail loop
    517                                 #
    518                                 #if addr in to_list:
    519 
    520                                 if addr == self.trac_smtp_from:
    521                                         if self.DEBUG:
    522                                                 print "Skipping %s mail address for CC-field" %(addr)
    523                                         continue
    524 
    525                                 if email_cc:
    526                                         email_cc = '%s, %s' %(email_cc, addr)
    527                                 else:
    528                                         email_cc = addr
    529 
    530                         if email_cc:
    531                                 if self.DEBUG:
    532                                         print 'TD: set_reply_fields: %s' %email_cc
    533 
    534                                 ticket['cc'] = self.email_to_unicode(email_cc)
    535536
    536537        def save_email_for_debug(self, message, tempfile=False):
Note: See TracChangeset for help on using the changeset viewer.