Пример #1
0
    def test_rfc5032_within(self):
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3)))  # 1
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600)))  # 2
        self.imapserver.receive(Mail.create(['user']))  # 3
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals('1', (yield from imap_client.search('OLDER', '84700')).lines[0])
        self.assertEquals('2 3', (yield from imap_client.search('YOUNGER', '84700')).lines[0])
Пример #2
0
    def test_rfc4315_uidplus_expunge(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals(('OK', ['1 EXPUNGE', 'UID EXPUNGE completed.']), (yield from imap_client.uid('expunge', '1:1')))

        self.assertEquals(1, extract_exists((yield from imap_client.select())))
Пример #3
0
    def test_expunge_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals(('OK', ['1 EXPUNGE', '2 EXPUNGE', 'EXPUNGE completed.']), (yield from imap_client.expunge()))

        self.assertEquals(0, extract_exists((yield from imap_client.select())))
Пример #4
0
    def test_max_ids_one_user_three_mails_in_two_mailboxes(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user']), mailbox='OUTBOX')

        self.assertEquals(1, server_state.max_id('user', 'OUTBOX'))
        self.assertEquals(2, server_state.max_id('user', 'INBOX'))
        self.assertEquals(2, server_state.max_uid('user', 'INBOX'))
    async def test_fetch_one_messages_out_of_two(self):
        self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître'))
        self.imapserver.receive(Mail.create(['user'], mail_from='you', subject='yo', content='bro'))
        imap_client = await self.login_user('user', 'pass', select=True)

        _, data = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1)

        self.assertEqual(2, len(data))
Пример #6
0
    async def test_search_two_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        result, data = await imap_client.search('ALL')

        self.assertEqual('OK', result)
        self.assertEqual('1 2', data[0])
Пример #7
0
    def test_copy_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, _ = yield from imap_client.copy('1', '2', 'MAILBOX')
        self.assertEqual('OK', result)

        self.assertEquals(2, extract_exists((yield from imap_client.select('MAILBOX'))))
    def test_expunge_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        yield from asyncio.wait_for(self.loop.run_in_executor(None, imap_client.expunge), 1)

        self.assertEquals(('OK', [b'0']), (yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1)))
Пример #9
0
    async def test_rfc4315_uidplus_expunge(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        self.assertEqual(('OK', ['1 EXPUNGE', 'UID EXPUNGE completed.']),
                         (await imap_client.uid('expunge', '1:1')))

        self.assertEqual(1, extract_exists((await imap_client.select())))
    async def test_expunge_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        await asyncio.wait_for(self.loop.run_in_executor(None, imap_client.expunge), 1)

        self.assertEqual(('OK', [b'0']), (await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1)))
Пример #11
0
    def test_max_ids_one_user_three_mails_in_two_mailboxes(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user']), mailbox='OUTBOX')

        self.assertEqual(1, server_state.max_id('user', 'OUTBOX'))
        self.assertEqual(2, server_state.max_id('user', 'INBOX'))
        self.assertEqual(2, server_state.max_uid('user', 'INBOX'))
    def test_fetch_one_messages_out_of_two(self):
        self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître'))
        self.imapserver.receive(Mail.create(['user'], mail_from='you', subject='yo', content='bro'))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        _, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1)

        self.assertEqual(2, len(data))
Пример #13
0
    def test_copy_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, _ = yield from imap_client.copy('1', '2', 'MAILBOX')
        self.assertEqual('OK', result)

        self.assertEquals(2, extract_exists((yield from imap_client.select('MAILBOX'))))
Пример #14
0
    def test_search_two_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from imap_client.search('ALL')

        self.assertEqual('OK', result)
        self.assertEqual('1 2', data[0])
Пример #15
0
    def test_search_two_messages(self):
        imap_receive(Mail.create(['user']))
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from imap_client.search('ALL')

        self.assertEqual('OK', result)
        self.assertEqual('1 2', data[0])
    def test_search_by_uid_two_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', 'utf-8', 'ALL')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([b'1 2'], data)
Пример #17
0
    def test_expunge_messages(self):
        imap_receive(Mail.create(['user']))
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals(
            ('OK', ['1 EXPUNGE', '2 EXPUNGE', 'EXPUNGE completed.']),
            (yield from imap_client.expunge()))

        self.assertEquals(('OK', ['0']), (yield from imap_client.select()))
Пример #18
0
    async def test_expunge_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        self.assertEqual(
            ('OK', ['1 EXPUNGE', '2 EXPUNGE', 'EXPUNGE completed.']),
            (await imap_client.expunge()))

        self.assertEqual(0, extract_exists((await imap_client.select())))
Пример #19
0
    def test_store_and_search_by_keyword(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)
        self.assertEqual('', (yield from imap_client.uid_search('KEYWORD FOO', charset=None)).lines[0])

        self.assertEquals('OK', (yield from imap_client.uid('store', '1', '+FLAGS (FOO)')).result)

        self.assertEqual('1', (yield from imap_client.uid_search('KEYWORD FOO', charset=None)).lines[0])
        self.assertEqual('2', (yield from imap_client.uid_search('UNKEYWORD FOO', charset=None)).lines[0])
    async def test_search_by_uid_two_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        result, data = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', 'utf-8', 'ALL')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([b'1 2'], data)
Пример #21
0
    def test_search_three_messages_by_uid(self):
        imap_client = yield from self.login_user('user', 'pass', select=True)
        imap_receive(Mail.create(['user']))  # id=1 uid=1
        imap_receive(Mail.create(['user']),
                     mailbox='OTHER_MAILBOX')  # id=1 uid=2
        imap_receive(Mail.create(['user']))  # id=2 uid=3

        self.assertEqual('1 2', (yield from
                                 imap_client.search('ALL')).lines[0])
        self.assertEqual('1 3', (yield from
                                 imap_client.uid_search('ALL')).lines[0])
    def test_file_with_attachement(self):
        with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data/test_attachment.eml'), mode='br') as msg:
            imap_client = yield from self.login_user('user@mail', 'pass', select=True)
            mail = Mail(email.message_from_binary_file(msg))

            self.imapserver.receive(mail, imap_user='******')

            result, data = yield from imap_client.fetch('1', '(RFC822)')

            self.assertEqual('OK', result)
            self.assertEqual(['1 FETCH (RFC822 {418898}', mail.as_bytes(), ')', 'FETCH completed.'], data)
    async def test_rfc5032_within(self):
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2
        self.imapserver.receive(Mail.create(['user'])) # 3
        imap_client = await self.login_user('user', 'pass', select=True)

        self.assertEqual([b'2 3'], (await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'YOUNGER', '84700')), 1))[1])

        self.assertEqual([b'1'], (await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'OLDER', '84700')), 1))[1])
Пример #24
0
    def test_search_three_messages_by_uid(self):
        imap_client = yield from self.login_user('user', 'pass', select=True)
        self.imapserver.receive(Mail.create(['user']))  # id=1 uid=1
        self.imapserver.receive(Mail.create(['user']), mailbox='OTHER_MAILBOX')  # id=1 uid=1
        self.imapserver.receive(Mail.create(['user']))  # id=2 uid=2

        self.assertEqual('1 2', (yield from imap_client.search('ALL')).lines[0])
        self.assertEqual('1 2', (yield from imap_client.uid_search('ALL')).lines[0])

        yield from imap_client.select('OTHER_MAILBOX')
        self.assertEqual('1', (yield from imap_client.uid_search('ALL')).lines[0])
Пример #25
0
    def test_expunge_messages(self):
        imap_receive(Mail.create(['user']))
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        yield from asyncio.wait_for(
            self.loop.run_in_executor(None, imap_client.expunge), 1)

        self.assertEquals(('OK', [b'0']), (yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None, functools.partial(imap_client.select)), 1)))
    async def test_copy_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        result, _ = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.copy, '1 2', 'MAILBOX')), 20)
        self.assertEqual('OK', result)

        self.assertEqual(('OK', [b'2']), (await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select, 'MAILBOX')), 20)))
    def test_rfc5032_within(self):
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1
        self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2
        self.imapserver.receive(Mail.create(['user'])) # 3
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals([b'2 3'], (yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'YOUNGER', '84700')), 1))[1])

        self.assertEquals([b'1'], (yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'OLDER', '84700')), 1))[1])
Пример #28
0
    def test_file_with_attachement(self):
        with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data/test_attachment.eml'), mode='br') as msg:
            imap_client = yield from self.login_user('user@mail', 'pass', select=True)
            mail = Mail(email.message_from_binary_file(msg))

            imap_receive(mail, imap_user='******')

            result, data = yield from imap_client.fetch('1', '(RFC822)')

            self.assertEqual('OK', result)
            self.assertEqual([b'* 1 FETCH (UID 1 RFC822 {418898}', mail.as_bytes(), 'FETCH completed.'], data)
    def test_copy_messages(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, _ = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.copy, '1 2', 'MAILBOX')), 20)
        self.assertEqual('OK', result)

        self.assertEquals(('OK', [b'2']), (yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select, 'MAILBOX')), 20)))
Пример #30
0
    async def test_search_three_messages_by_uid(self):
        imap_client = await self.login_user('user', 'pass', select=True)
        self.imapserver.receive(Mail.create(['user']))  # id=1 uid=1
        self.imapserver.receive(Mail.create(['user']),
                                mailbox='OTHER_MAILBOX')  # id=1 uid=1
        self.imapserver.receive(Mail.create(['user']))  # id=2 uid=2

        self.assertEqual('1 2', (await imap_client.search('ALL')).lines[0])
        self.assertEqual('1 2', (await imap_client.uid_search('ALL')).lines[0])

        await imap_client.select('OTHER_MAILBOX')
        self.assertEqual('1', (await imap_client.uid_search('ALL')).lines[0])
Пример #31
0
    def test_max_ids_one_user_one_mail(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user']))

        self.assertEquals(1, server_state.max_id('user', 'INBOX'))
        self.assertEquals(1, server_state.max_uid('user'))
        self.assertEquals(0, server_state.max_id('user', 'OTHER_MAILBOX'))
Пример #32
0
    def test_append(self):
        imap_client = yield from self.login_user('user@mail', 'pass')

        self.assertEquals(('OK', [b'0']), (yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.select, 'INBOX', readonly=True)),
            2)))

        msg = Mail.create(['user@mail'],
                          subject='append msg',
                          content='do you see me ?')
        self.assertEquals(
            ('OK', [b'APPEND completed.']), (yield from asyncio.wait_for(
                self.loop.run_in_executor(
                    None,
                    functools.partial(imap_client.append, 'INBOX', 'FOO BAR',
                                      datetime.now(tz=utc), msg.as_bytes())),
                2)))

        self.assertEquals(('OK', [b'1']), (yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.select, 'INBOX', readonly=True)),
            2)))
    async def test_search_by_uid_range(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        _, data = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:2')), 1)
        self.assertEqual([b'1 2'], data)

        _, data = await asyncio.wait_for(
                    self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:*')), 1)
        self.assertEqual([b'1 2'], data)

        _, data = await asyncio.wait_for(
                    self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:1')), 1)
        self.assertEqual([b'1'], data)
Пример #34
0
    def test_reprocess_ids_if_a_message_is_removed(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user'], 'from1'), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user'], 'from2'), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user'], 'from3'), mailbox='INBOX')

        server_state.remove_byid('user', 'INBOX', 1)
        self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id)
        self.assertEqual(2, server_state.get_mailbox_messages('user', 'INBOX')[1].id)
        self.assertEquals(2, server_state.max_id('user', 'INBOX'))
        self.assertEquals(3, server_state.max_uid('user', 'INBOX'))

        server_state.remove_byid('user', 'INBOX', 1)
        self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id)
        self.assertEquals(1, server_state.max_id('user', 'INBOX'))
        self.assertEquals(3, server_state.max_uid('user', 'INBOX'))
Пример #35
0
    def test_max_ids_one_user_one_mail(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user']))

        self.assertEquals(1, server_state.max_id('user', 'INBOX'))
        self.assertEquals(1, server_state.max_uid('user', 'INBOX'))
        self.assertEquals(0, server_state.max_id('user', 'OTHER_MAILBOX'))
Пример #36
0
    def test_reprocess_ids_if_a_message_is_removed(self):
        server_state = ServerState()
        server_state.add_mail('user', Mail.create(['user'], 'from1'), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user'], 'from2'), mailbox='INBOX')
        server_state.add_mail('user', Mail.create(['user'], 'from3'), mailbox='INBOX')

        server_state.remove_byid('user', 'INBOX', 1)
        self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id)
        self.assertEqual(2, server_state.get_mailbox_messages('user', 'INBOX')[1].id)
        self.assertEqual(2, server_state.max_id('user', 'INBOX'))
        self.assertEqual(3, server_state.max_uid('user', 'INBOX'))

        server_state.remove_byid('user', 'INBOX', 1)
        self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id)
        self.assertEqual(1, server_state.max_id('user', 'INBOX'))
        self.assertEqual(3, server_state.max_uid('user', 'INBOX'))
    def test_search_by_uid_range(self):
        self.imapserver.receive(Mail.create(['user']))
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        _, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:2')), 1)
        self.assertEqual([b'1 2'], data)

        _, data = yield from asyncio.wait_for(
                    self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:*')), 1)
        self.assertEqual([b'1 2'], data)

        _, data = yield from asyncio.wait_for(
                    self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:1')), 1)
        self.assertEqual([b'1'], data)
Пример #38
0
    async def test_rfc5032_within(self):
        self.imapserver.receive(
            Mail.create(['user'],
                        date=datetime.now(tz=utc) -
                        timedelta(seconds=84600 * 3)))  # 1
        self.imapserver.receive(
            Mail.create(['user'],
                        date=datetime.now(tz=utc) -
                        timedelta(seconds=84600)))  # 2
        self.imapserver.receive(Mail.create(['user']))  # 3
        imap_client = await self.login_user('user', 'pass', select=True)

        self.assertEqual('1', (await imap_client.search('OLDER',
                                                        '84700')).lines[0])
        self.assertEqual('2 3', (await imap_client.search('YOUNGER',
                                                          '84700')).lines[0])
Пример #39
0
    def test_rfc5032_within(self):
        imap_receive(
            Mail.create(['user'],
                        date=datetime.now(tz=utc) -
                        timedelta(seconds=84600 * 3)))  # 1
        imap_receive(
            Mail.create(['user'],
                        date=datetime.now(tz=utc) -
                        timedelta(seconds=84600)))  # 2
        imap_receive(Mail.create(['user']))  # 3
        imap_client = yield from self.login_user('user', 'pass', select=True)

        self.assertEquals('1', (yield from
                                imap_client.search('OLDER', '84700')).lines[0])
        self.assertEquals('2 3', (yield from
                                  imap_client.search('YOUNGER',
                                                     '84700')).lines[0])
    async def test_select_one_message_in_mailbox(self):
        self.imapserver.receive(Mail.create(to=['user'], mail_from='me', subject='hello'))
        imap_client = await self.login_user('user', 'pass')

        result, data = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1)

        self.assertEqual('OK', result)
        self.assertEqual([b'1'], data)
    def test_select_one_message_in_mailbox(self):
        self.imapserver.receive(Mail.create(to=['user'], mail_from='me', subject='hello'))
        imap_client = yield from self.login_user('user', 'pass')

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1)

        self.assertEqual('OK', result)
        self.assertEqual([b'1'], data)
Пример #42
0
    def test_fetch_by_uid(self):
        imap_client = yield from self.login_user('user', 'pass', select=True)
        mail = Mail.create(['user'], mail_from='me', subject='hello',
                           content='pleased to meet you, wont you guess my name ?')
        self.imapserver.receive(mail)

        response = (yield from imap_client.uid('fetch', '1', '(RFC822)'))
        self.assertEqual('OK', response.result)
        self.assertEquals(mail.as_bytes(), response.lines[1])
    def test_fetch_one_message_with_headers(self):
        self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître'))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        _, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(BODY.PEEK[HEADER.FIELDS (Content-type From)])')), 1)

        self.assertEqual(b'1 (UID 1 BODY[HEADER.FIELDS (Content-type From)] {57}', data[0][0])
        self.assertEqual(b'Content-type: text/plain; charset="utf-8"\r\nFrom: <me>\r\n\r\n', data[0][1])
Пример #44
0
    def test_copy_messages_by_uid(self):
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, _ = yield from imap_client.uid('copy', '1', 'MAILBOX')
        self.assertEqual('OK', result)

        self.assertEquals(('OK', ['1']),
                          (yield from imap_client.select('MAILBOX')))
Пример #45
0
    async def test_copy_messages_by_uid(self):
        self.imapserver.receive(Mail.create(['user']))
        imap_client = await self.login_user('user', 'pass', select=True)

        result, _ = await imap_client.uid('copy', '1', 'MAILBOX')
        self.assertEqual('OK', result)

        self.assertEqual(1,
                         extract_exists((await imap_client.select('MAILBOX'))))
    async def test_fetch_one_message_with_headers(self):
        self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître'))
        imap_client = await self.login_user('user', 'pass', select=True)

        _, data = await asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(BODY.PEEK[HEADER.FIELDS (Content-type From)])')), 1)

        self.assertEqual(b'1 (UID 1 BODY[HEADER.FIELDS (Content-type From)] {57}', data[0][0])
        self.assertEqual(b'Content-type: text/plain; charset="utf-8"\r\nFrom: <me>\r\n\r\n', data[0][1])
Пример #47
0
    def test_concurrency_4_sync_command_waits_for_async_commands_to_finish(self):
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        asyncio.async(imap_client.copy('1', 'MBOX'))
        asyncio.async(imap_client.expunge())
        examine = asyncio.async(imap_client.examine('MBOX'))

        self.assertEquals(1, extract_exists((yield from asyncio.wait_for(examine, 1))))
Пример #48
0
    def test_concurrency_2_executing_same_async_commands_sequentially(self):
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        f1 = asyncio. async (imap_client.fetch('1', '(RFC822)'))
        f2 = asyncio. async (imap_client.fetch('1', '(RFC822)'))

        yield from asyncio.wait([f1, f2])
        self.assertIsNone(f1.exception())
        self.assertIsNone(f2.exception())
    def test_fetch_one_message_by_uid(self):
        mail = Mail.create(['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?')
        self.imapserver.receive(mail)
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([(b'1 (UID 1 RFC822 {360}', mail.as_bytes()), b')'], data)
    def test_fetch_one_message_by_uid_with_bodypeek(self):
        mail = Mail.create(['user'], mail_from='me', subject='hello', content='this mail is still unread')
        self.imapserver.receive(mail)
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(UID BODY.PEEK[])')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([(b'1 (UID 1 BODY.PEEK[] {340}', mail.as_bytes()), b')'], data)
    def test_fetch_one_messages_by_uid_without_body(self):
        mail = Mail.create(['user'], mail_from='me', subject='hello', content='whatever')
        self.imapserver.receive(mail)
        imap_client = yield from self.login_user('user', 'pass', select=True)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(UID FLAGS)')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([(b'1 (UID 1 FLAGS ())')], data)
Пример #52
0
    def test_fetch_by_uid_without_body(self):
        imap_client = yield from self.login_user('user', 'pass', select=True)
        mail = Mail.create(['user'], mail_from='me', subject='hello',
                           content='pleased to meet you, wont you guess my name ?')
        self.imapserver.receive(mail)

        response = (yield from imap_client.uid('fetch', '1', '(UID FLAGS)'))

        self.assertEqual('OK', response.result)
        self.assertEquals('1 FETCH (UID 1 FLAGS ())', response.lines[0])
Пример #53
0
    def test_rfc6851_uidmove(self):
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)
        uidvalidity = self.imapserver.get_connection('user').uidvalidity

        self.assertEqual(('OK', ['OK [COPYUID %d 1:1 1:1]' % uidvalidity, '1 EXPUNGE', 'Done']),
                         (yield from imap_client.uid('move', '1:1', 'Trash')))

        self.assertEquals(0, extract_exists((yield from imap_client.select())))
        self.assertEquals(1, extract_exists((yield from imap_client.select('Trash'))))
Пример #54
0
    def test_concurrency_2_executing_same_async_commands_sequentially(self):
        self.imapserver.receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        f1 = asyncio.async(imap_client.fetch('1', '(RFC822)'))
        f2 = asyncio.async(imap_client.fetch('1', '(RFC822)'))

        yield from asyncio.wait([f1, f2])
        self.assertIsNone(f1.exception())
        self.assertIsNone(f2.exception())
    def test_fetch_one_messages_by_uid_encoding_cp1252(self):
        self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître', encoding='cp1252'))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        _, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1)

        mail_content = data[0][1]
        self.assertTrue(b'charset="cp1252"' in mail_content)
        self.assertTrue(b'ma\xeetre' in mail_content)
        self.assertEqual('maître', email.message_from_bytes(mail_content).get_payload().strip())
Пример #56
0
    def test_append(self):
        imap_client = yield from self.login_user('user@mail', 'pass')
        self.assertEquals(0, extract_exists((yield from imap_client.examine('INBOX'))))

        msg = Mail.create(['user@mail'], subject='append msg', content='do you see me ?')
        response = yield from imap_client.append(msg.as_bytes(), mailbox='INBOX', flags='FOO BAR',
                                                 date=datetime.now(tz=utc), )
        self.assertEquals('OK', response.result)
        self.assertTrue('1] APPEND completed' in response.lines[0])

        self.assertEquals(1, extract_exists((yield from imap_client.examine('INBOX'))))
    def test_idle(self):
        imap_client = yield from self.login_user('user', 'pass', select=True, lib=imaplib2.IMAP4)
        idle_callback = Mock()
        self.loop.run_in_executor(None, functools.partial(imap_client.idle, callback=idle_callback))
        yield from asyncio.wait_for(self.imapserver.get_connection('user').wait(imapserver.IDLE), 1)

        self.loop.run_in_executor(None, functools.partial(self.imapserver.receive,
                                                          Mail.create(to=['user'], mail_from='me', subject='hello')))

        yield from asyncio.wait_for(self.imapserver.get_connection('user').wait(imapserver.SELECTED), 1)
        time.sleep(0.1) # eurk hate sleeps but I don't know how to wait for the lib to receive end of IDLE
        idle_callback.assert_called_once()