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()
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()
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)
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)