Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
 def do_unseen(self, arg):
     '''List Unseen mail (equivalent to "search -t unseen").'''
     search_criterion = search.create_search_criterion(tags=['unseen'])
     mail_set = search.fetch_uids(self.imap_account,
                                  search_criterion=search_criterion)
     if len(mail_set) == 0:
         log.error('No unseen mail found')
     else:
         for mail_info in search.fetch_mails_info(self.imap_account,
                                                  mail_set=mail_set):
             sys.stdout.write(
                 u'UID : {:<10} From : {:<40.40} Subject : {:.50}\n'.format(
                     mail_info['uid'], mail_info['from'],
                     mail_info['subject']))
Esempio n. 4
0
def search_controller(req):
    params = req.params
    inputs = {
        "directory": params.get("directory") or const.DEFAULT_DIRECTORY,
        "tags": params.getall("tag") or None,
        "text": params.get("text") or None,
    }

    imap_cli.change_dir(imap_account, inputs["directory"])

    search_criterion = search.create_search_criterion(tags=inputs["tags"], text=inputs["text"])
    mail_set = search.fetch_uids(imap_account, search_criterion=search_criterion or [])
    mails_info = list(search.fetch_mails_info(imap_account, mail_set=mail_set))
    return json.dumps(mails_info, indent=2)
Esempio n. 5
0
    def do_search(self, arg):
        '''Search mail.'''
        usage = '\n'.join([
            'Usage: search [options]',
            '',
            'Options:',
            '    -a, --address=<address>     Search by address',
            '    -d, --date=<date>           Search by date (YYYY-MM-DD)',
            '    -s, --size=<SIZE>           Search by size (in bytes)',
            '    -S, --subject=<subject>     Search by subject',
            '    -t, --tags=<tags>           Searched tags (Comma separated)',
            '    -T, --full-text=<text>      Searched tags (Comma separated)',
            '    -h, --help                  Show help options.',
        ])
        try:
            args = docopt.docopt(usage, argv=arg)
        except SystemExit:
            return

        if args.get('--tags') is not None:
            args['--tags'] = args['--tags'].split(',')
        if args['--date'] is not None:
            try:
                date = datetime.datetime.strptime(args['--date'], '%Y-%m-%d')
            except ValueError:
                date = None
        else:
            date = None

        search_criterion = search.create_search_criterion(
            address=args['--address'],
            date=date,
            subject=args['--subject'],
            size=args['--size'],
            tags=args['--tags'],
            text=args['--full-text'],
        )
        mail_set = search.fetch_uids(self.imap_account,
                                     search_criterion=search_criterion)
        if len(mail_set) == 0:
            log.error('No mail found')
            return 0
        for mail_info in search.fetch_mails_info(self.imap_account,
                                                 mail_set=mail_set):
            sys.stdout.write(
                u'UID : {:<10} From : {:<40.40} Subject : {:.50}\n'.format(
                    mail_info['uid'],
                    mail_info['from'],
                    mail_info['subject']))
Esempio n. 6
0
 def do_unseen(self, arg):
     '''List Unseen mail (equivalent to "search -t unseen").'''
     search_criterion = search.create_search_criterion(tags=['unseen'])
     mail_set = search.fetch_uids(self.imap_account,
                                  search_criterion=search_criterion)
     if len(mail_set) == 0:
         log.error('No unseen mail found')
     else:
         for mail_info in search.fetch_mails_info(self.imap_account,
                                                  mail_set=mail_set):
             sys.stdout.write(
                 u'UID : {:<10} From : {:<40.40} Subject : {:.50}\n'.format(
                     mail_info['uid'],
                     mail_info['from'],
                     mail_info['subject']))
Esempio n. 7
0
def search_controller(req):
    params = req.params
    inputs = {
        'directory': params.get('directory') or const.DEFAULT_DIRECTORY,
        'tags': params.getall('tag') or None,
        'text': params.get('text') or None,
    }

    imap_cli.change_dir(imap_account, inputs['directory'])

    search_criterion = search.create_search_criterion(tags=inputs['tags'],
                                                      text=inputs['text'])
    mail_set = search.fetch_uids(imap_account,
                                 search_criterion=search_criterion or [])
    mails_info = list(search.fetch_mails_info(imap_account, mail_set=mail_set))
    return json.dumps(mails_info, indent=2)
Esempio n. 8
0
    def do_search(self, arg):
        '''Search mail.'''
        usage = '\n'.join([
            'Usage: search [options]',
            '',
            'Options:',
            '    -a, --address=<address>     Search by address',
            '    -d, --date=<date>           Search by date (YYYY-MM-DD)',
            '    -s, --size=<SIZE>           Search by size (in bytes)',
            '    -S, --subject=<subject>     Search by subject',
            '    -t, --tags=<tags>           Searched tags (Comma separated)',
            '    -T, --full-text=<text>      Searched tags (Comma separated)',
            '    -h, --help                  Show help options.',
        ])
        try:
            args = docopt.docopt(usage, argv=arg)
        except SystemExit:
            return

        if args.get('--tags') is not None:
            args['--tags'] = args['--tags'].split(',')
        if args['--date'] is not None:
            try:
                date = datetime.datetime.strptime(args['--date'], '%Y-%m-%d')
            except ValueError:
                date = None
        else:
            date = None

        search_criterion = search.create_search_criterion(
            address=args['--address'],
            date=date,
            subject=args['--subject'],
            size=args['--size'],
            tags=args['--tags'],
            text=args['--full-text'],
        )
        mail_set = search.fetch_uids(self.imap_account,
                                     search_criterion=search_criterion)
        if len(mail_set) == 0:
            log.error('No mail found')
            return 0
        for mail_info in search.fetch_mails_info(self.imap_account,
                                                 mail_set=mail_set):
            sys.stdout.write(
                u'UID : {:<10} From : {:<40.40} Subject : {:.50}\n'.format(
                    mail_info['uid'], mail_info['from'], mail_info['subject']))
Esempio n. 9
0
def imap_search(adress):
    ensure_connection()
    search_criterion = search.create_search_criterion(address=adress)
    mail_set = search.fetch_uids(
        imap_account, search_criterion=search_criterion)
    if len(mail_set) == 0:
        print 'VIMAP: No mail found'
        return 0

    reset_buffer('vimap-list')
    b = vim.current.buffer
    b[:] = None
    for mail_info in search.fetch_mails_info(imap_account, mail_set=mail_set):
        b.append(display_conf['format_list'].format(
            **mail_info).replace('\n', ' '))

    b[0] = u'Mails from «{}»:'.format(adress)

    for key, action in list_mappings:
        vim.command("nnoremap <silent> <buffer> {} {}".format(key, action))
Esempio n. 10
0
    def test_fetch_uids(self):
        self.imap_account = imaplib.IMAP4_SSL()

        assert list(search.fetch_uids(self.imap_account)) == ['1']
Esempio n. 11
0
    def test_execute_simple_search(self):
        self.imap_account = imaplib.IMAP4_SSL()

        assert search.fetch_uids(self.imap_account) == ['1']
Esempio n. 12
0
    def test_fetch_uids(self):
        self.imap_account = imaplib.IMAP4_SSL()

        assert list(search.fetch_uids(self.imap_account)) == ['1']
Esempio n. 13
0
    def test_execute_simple_search(self):
        self.imap_account = imaplib.IMAP4_SSL()

        assert search.fetch_uids(self.imap_account) == ['1']