Esempio n. 1
0
 def run(self):
     while self.running:
         item = self._queue.get()
         log.debug('Thread %s - got item %s', current_thread().name, item)
         try:
             folder = item['folder']
             uid_validity = item['uid_validity']
             if folder != self._selected_folder:
                 self.select_folder(folder, uid_validity)
             kwargs = copy(item)
             del kwargs['folder']
             del kwargs['uid_validity']
             del kwargs['retry']
             kwargs['client'] = self._client
             download(**kwargs)
         except SOFT_ERRORS as e:
             self._queue.task_done()
             msgid = item['msgid']
             log.warn('Download of message %d problem: %s', msgid, e)
             if item['retry'] < 3:
                 item['retry'] += 1
                 self._queue.put(item)
             else:
                 log.exception('Download of message %d failed: %s', msgid,
                               e)
         except Exception as e:
             self._queue.task_done()
             log.exception('Download of message %d failed: %s',
                           item['msgid'], e)
         else:
             self._queue.task_done()
Esempio n. 2
0
 def run(self):
     while self.running:
         item=self._queue.get()
         log.debug('Thread %s - got item %s', current_thread().name, item)
         try:
             folder=item['folder']
             uid_validity = item['uid_validity']
             if folder != self._selected_folder:
                 self.select_folder(folder, uid_validity)
             kwargs=copy(item)   
             del kwargs['folder']
             del kwargs['uid_validity']
             del kwargs['retry'] 
             kwargs['client']=self._client
             download(**kwargs)
         except SOFT_ERRORS as e:
             self._queue.task_done()
             msgid=item['msgid']
             log.warn('Download of message %d problem: %s', msgid, e)
             if item['retry'] < 3:
                 item['retry']+=1
                 self._queue.put(item)
             else:
                 log.exception('Download of message %d failed: %s', msgid, e) 
         except Exception as e:
             self._queue.task_done()
             log.exception('Download of message %d failed: %s', item['msgid'], e) 
         else:
             self._queue.task_done()
Esempio n. 3
0
def process_folder(c, pool, folder, imap_filter, charset, eval_parser, opts):    
    def msg_action(opts):
        action=None
        params=[]
        
        if opts.move:
            action='move'
            params.append(opts.move)
        elif opts.delete:
            action='delete'
        elif not opts.seen:
            action='unseen'
        return {'message_action':action, 'message_action_args': tuple(params)}
    
    selected=c.select_folder(folder)
    msg_count=selected[b'EXISTS']
    if msg_count>0:
        uid_validity=selected[b'UIDVALIDITY']
        log.debug('Folder %s has %d messages in total', folder, msg_count  )
        # this is workaround for imapclient 13.0 -  since it has bug in charset in search
        messages=c.search(imap_filter or 'ALL', charset)
        if not messages:
            log.warn('No messages found')
        else:
            log.debug('Found %d messages in folder %s', len(messages), folder)
            messages.sort() # just to be sure messages are processed from oldest
            res=c.fetch(messages, [b'INTERNALDATE', b'FLAGS', b'RFC822.SIZE', b'ENVELOPE', b'BODYSTRUCTURE'])
            for msgid, data in   six.iteritems(res):
                body=data[b'BODYSTRUCTURE']
                msg_info=MailInfo(folder,data)
                log.debug('Got message %s', msg_info)
                
                part_infos=process_parts(body, msg_info, eval_parser, opts.filter, opts.test)
                if part_infos:
                    if pool:
                        pool.download(folder=folder, msgid=msgid, part_infos=part_infos, msg_info=msg_info, 
                                      filename=opts.file_name,  command= opts.command, uid_validity = uid_validity,
                                 delete=opts.delete_file, **msg_action(opts))
                    else:
                        download(msgid, part_infos, msg_info, opts.file_name,  command= opts.command, client=c, 
                                 delete=opts.delete_file, **msg_action(opts))
                    
            
                        
    else:
        log.info('No messages in folder %s', folder) 
Esempio n. 4
0
def process_folder(c, pool, folder, imap_filter, charset, eval_parser, opts):
    def msg_action(opts):
        action = None
        params = []

        if opts.move:
            action = 'move'
            params.append(opts.move)
        elif opts.delete:
            action = 'delete'
        elif not opts.seen:
            action = 'unseen'
        return {'message_action': action, 'message_action_args': tuple(params)}

    selected = c.select_folder(folder)
    msg_count = selected[b'EXISTS']
    if msg_count > 0:
        uid_validity = selected[b'UIDVALIDITY']
        log.debug('Folder %s has %d messages in total', folder, msg_count)
        # this is workaround for imapclient 13.0 -  since it has bug in charset in search
        messages = c.search(imap_filter or 'ALL', charset)
        if not messages:
            log.warn('No messages found')
        else:
            log.debug('Found %d messages in folder %s', len(messages), folder)
            messages.sort(
            )  # just to be sure messages are processed from oldest
            res = c.fetch(messages, [
                b'INTERNALDATE', b'FLAGS', b'RFC822.SIZE', b'ENVELOPE',
                b'BODYSTRUCTURE'
            ])
            for msgid, data in six.iteritems(res):
                body = data[b'BODYSTRUCTURE']
                msg_info = MailInfo(folder, data)
                log.debug('Got message %s', msg_info)

                part_infos = process_parts(body, msg_info, eval_parser,
                                           opts.filter, opts.test)
                if part_infos:
                    if pool:
                        pool.download(folder=folder,
                                      msgid=msgid,
                                      part_infos=part_infos,
                                      msg_info=msg_info,
                                      filename=opts.file_name,
                                      command=opts.command,
                                      uid_validity=uid_validity,
                                      delete=opts.delete_file,
                                      **msg_action(opts))
                    else:
                        download(msgid,
                                 part_infos,
                                 msg_info,
                                 opts.file_name,
                                 command=opts.command,
                                 client=c,
                                 delete=opts.delete_file,
                                 **msg_action(opts))

    else:
        log.info('No messages in folder %s', folder)