def test_combine_search_criterion(self): self.imap_account = imaplib.IMAP4_SSL() date = datetime.datetime(1989, 1, 3) mail_address = '*****@*****.**' search_criterion = [ search.create_search_criterion_by_date(date, relative='BEFORE'), search.create_search_criterion_by_mail_address(mail_address, header_name='TO'), ] imap_request = search.combine_search_criterion(search_criterion) assert imap_request == '(BEFORE 03-Jan-1989 TO "*****@*****.**")' imap_request = search.combine_search_criterion(search_criterion, operator='AND') assert imap_request == '(BEFORE 03-Jan-1989 TO "*****@*****.**")' imap_request = search.combine_search_criterion(search_criterion, operator='OR') assert imap_request == 'OR BEFORE 03-Jan-1989 TO "*****@*****.**"' imap_request = search.combine_search_criterion(search_criterion, operator='NOT') assert imap_request == 'NOT BEFORE 03-Jan-1989 TO "*****@*****.**"' imap_request = search.combine_search_criterion(search_criterion, operator='WRONG') assert imap_request == '(BEFORE 03-Jan-1989 TO "*****@*****.**")'
def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('imap_server', help="IMAP Server hostname") parser.add_argument('searched_address', help="Searched address") parser.add_argument('-l', '--login', help="Login for IMAP account") parser.add_argument('--no-ssl', action='store_true', help="Don't use SSL") parser.add_argument('-v', '--verbose', action='store_true', help='increase output verbosity') args = parser.parse_args() password = getpass.getpass() logging.basicConfig(level=logging.INFO, stream=sys.stdout) try: imap_account = imap_cli.connect( hostname=args.imap_server, username=args.login, password=password, ssl=not args.no_ssl, ) for directory_status in sorted(imap_cli.status(imap_account), key=lambda obj: obj['directory']): imap_cli.change_dir(imap_account, directory_status['directory']) mail_set = search.fetch_uids( imap_account, search_criterion=[ search.create_search_criterion_by_mail_address( args.searched_address) ], ) if len(mail_set) > 0: sys.stdout.write(u'{} Directory\n'.format( directory_status['directory'])) for mail_info in search.fetch_mails_info(imap_account, mail_set=mail_set): format_string = u''.join([ u' {:<10} ', u'From : {:<30.30} \t', u'Subject : {:.50}\n' ]) sys.stdout.write( format_string.format(mail_info['uid'], mail_info['from'], mail_info['subject'])) imap_cli.disconnect(imap_account) except KeyboardInterrupt: log.info('Interrupt by user, exiting') return 0
def test_create_search_criterion_by_mail_address(self): self.imap_account = imaplib.IMAP4_SSL() mail_address = '*****@*****.**' search_criterion = search.create_search_criterion(address=mail_address) assert search_criterion == ['FROM "*****@*****.**"'] search_criterion = search.create_search_criterion_by_mail_address( mail_address, header_name='WRONG') assert search_criterion == 'FROM "*****@*****.**"' search_criterion = search.create_search_criterion_by_mail_address( mail_address, header_name='CC') assert search_criterion == 'CC "*****@*****.**"' search_criterion = search.create_search_criterion_by_mail_address( mail_address, header_name='BCC') assert search_criterion == 'BCC "*****@*****.**"' search_criterion = search.create_search_criterion_by_mail_address( mail_address, header_name='TO') assert search_criterion == 'TO "*****@*****.**"'
def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('imap_server', help="IMAP Server hostname") parser.add_argument('searched_address', help="Searched address") parser.add_argument('-l', '--login', help="Login for IMAP account") parser.add_argument('--no-ssl', action='store_true', help="Don't use SSL") parser.add_argument('-v', '--verbose', action='store_true', help='increase output verbosity') args = parser.parse_args() password = getpass.getpass() logging.basicConfig(level=logging.INFO, stream=sys.stdout) try: imap_account = imap_cli.connect( hostname=args.imap_server, username=args.login, password=password, ssl=not args.no_ssl, ) for directory_status in sorted(imap_cli.status(imap_account), key=lambda obj: obj['directory']): imap_cli.change_dir(imap_account, directory_status['directory']) mail_set = search.fetch_uids( imap_account, search_criterion=[ search.create_search_criterion_by_mail_address( args.searched_address)], ) if len(mail_set) > 0: sys.stdout.write(u'{} Directory\n'.format( directory_status['directory'])) for mail_info in search.fetch_mails_info(imap_account, mail_set=mail_set): format_string = u''.join([ u' {:<10} ', u'From : {:<30.30} \t', u'Subject : {:.50}\n']) sys.stdout.write(format_string.format( mail_info['uid'], mail_info['from'], mail_info['subject'])) imap_cli.disconnect(imap_account) except KeyboardInterrupt: log.info('Interrupt by user, exiting') return 0