Beispiel #1
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')))
Beispiel #2
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', '2', 'EXPUNGE completed.']),
                          (yield from imap_client.expunge()))

        self.assertEquals(('OK', ['0']), (yield from imap_client.select()))
Beispiel #3
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])
Beispiel #4
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())
Beispiel #5
0
    def test_copy_messages(self):
        imap_receive(Mail.create(['user']))
        imap_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'))))
Beispiel #6
0
    def test_select_one_message_in_mailbox(self):
        imap_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)
Beispiel #7
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)
Beispiel #8
0
    def test_concurrency_4_sync_command_waits_for_async_commands_to_finish(
            self):
        imap_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(('OK', ['1']),
                          (yield from asyncio.wait_for(examine, 1)))
Beispiel #9
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)))
Beispiel #10
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 ?')
        imap_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])
Beispiel #11
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 ?')
        imap_receive(mail)

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

        self.assertEqual('OK', response.result)
        self.assertEquals(mail.as_bytes(), response.lines[1])
Beispiel #12
0
    def test_search_by_uid_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 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)
Beispiel #13
0
    def test_fetch(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 ?')
        imap_receive(mail)

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

        self.assertEqual('OK', result)
        self.assertEqual([mail.as_bytes(), 'FETCH completed.'], data)
Beispiel #14
0
    def test_copy_messages(self):
        imap_receive(Mail.create(['user']))
        imap_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)))
    def test_fetch_one_messages_by_uid_without_body(self):
        mail = Mail.create(['user'],
                           mail_from='me',
                           subject='hello',
                           content='whatever')
        imap_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)
Beispiel #16
0
    def test_concurrency_3_executing_async_commands_in_parallel(self):
        # cf valid example in https://tools.ietf.org/html/rfc3501#section-5.5
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass', select=True)

        store = asyncio. async (imap_client.store('1', '+FLAGS FOO'))
        copy = asyncio. async (imap_client.copy('1', 'MBOX'))
        expunge = asyncio. async (imap_client.expunge())

        yield from asyncio.wait([store, copy, expunge])
        self.assertEquals(('OK', ['0']), (yield from imap_client.select()))
        self.assertEquals(('OK', ['1']),
                          (yield from imap_client.select('MBOX')))
        self.assertEqual('1', (yield from
                               imap_client.search('KEYWORD FOO',
                                                  charset=None)).lines[0])
Beispiel #17
0
    def test_idle(self):
        imap_client = yield from self.login_user('user', 'pass', select=True)

        idle = asyncio. async (imap_client.idle())
        self.assertEquals('idling',
                          (yield from imap_client.wait_server_push()))

        imap_receive(Mail.create(to=['user'], mail_from='me', subject='hello'))

        self.assertEquals('1 EXISTS',
                          (yield from imap_client.wait_server_push()))
        self.assertEquals('1 RECENT',
                          (yield from imap_client.wait_server_push()))

        imap_client.idle_done()
        self.assertEquals(('OK', ['IDLE terminated']),
                          (yield from asyncio.wait_for(idle, 1)))
Beispiel #18
0
    def test_fetch_one_messages_by_uid(self):
        mail = Mail.create(
            ['user'],
            mail_from='me',
            subject='hello',
            content='pleased to meet you, wont you guess my name ?')
        imap_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 {359}', mail.as_bytes()), b')'],
                         data)
Beispiel #19
0
    def test_store_and_search_by_keyword(self):
        imap_receive(Mail.create(['user']))
        imap_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])
Beispiel #20
0
    def test_fetch_one_message_with_UID(self):
        imap_receive(
            Mail.create(['user'],
                        mail_from='me',
                        subject='hello',
                        content='maître'))
        imap_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))
Beispiel #21
0
    def test_fetch_one_messages_by_uid_encoding_cp1252(self):
        imap_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())
Beispiel #22
0
    def test_rename_mailbox(self):
        imap_receive(Mail.create(['user']))
        imap_client = yield from self.login_user('user', 'pass')

        self.assertEquals(('NO', [b'STATUS completed.']),
                          (yield from asyncio.wait_for(
                              self.loop.run_in_executor(
                                  None,
                                  functools.partial(imap_client.status, 'MBOX',
                                                    '(MESSAGES)')), 1)))

        self.assertEquals(
            ('OK', [b'RENAME completed.']), (yield from asyncio.wait_for(
                self.loop.run_in_executor(
                    None, functools.partial(imap_client.rename, 'INBOX',
                                            'MBOX')), 1)))

        self.assertEquals(('OK', [b'MBOX (MESSAGES 1)']),
                          (yield from asyncio.wait_for(
                              self.loop.run_in_executor(
                                  None,
                                  functools.partial(imap_client.status, 'MBOX',
                                                    '(MESSAGES)')), 1)))
Beispiel #23
0
    def test_store_and_search_by_keyword(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 asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.uid, 'search', None,
                                  'KEYWORD FOO')), 1)

        self.assertEqual('OK', result)
        self.assertEqual([b''], data)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.uid, 'store', '1',
                                  '+FLAGS FOO')), 1)
        self.assertEqual('OK', result)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.uid, 'search', None,
                                  'KEYWORD FOO')), 1)
        self.assertEqual('OK', result)
        self.assertEqual([b'1'], data)

        result, data = yield from asyncio.wait_for(
            self.loop.run_in_executor(
                None,
                functools.partial(imap_client.uid, 'search', None,
                                  'UNKEYWORD FOO')), 1)
        self.assertEqual('OK', result)
        self.assertEqual([b'2'], data)
Beispiel #24
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])
Beispiel #25
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])
Beispiel #26
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([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])