def test_get_recipients():
    msg = EmailMessage()
    msg['To'] = 'Foo Example <*****@*****.**>'
    msg['Cc'] = 'Bar Bar <*****@*****.**>'
    msg['Bcc'] = 'Invisible Recipient <*****@*****.**>'

    assert get_recipients(msg) == ['*****@*****.**', '*****@*****.**', '*****@*****.**']
    async def deliver(self, messages: Union[EmailMessage, Iterable[EmailMessage]]):
        assert check_argument_types()
        if isinstance(messages, EmailMessage):
            messages = [messages]

        for message in messages:
            args = [self.path, '-i', '-B', '8BITMIME'] + get_recipients(message)
            try:
                process = await create_subprocess_exec(*args, stdin=subprocess.PIPE,
                                                       stderr=subprocess.PIPE)
            except Exception as e:
                raise DeliveryError(str(e), message) from e

            del message['Bcc']
            stdout, stderr = await process.communicate(message.as_bytes())
            if process.returncode:
                error = stderr.decode(sys.stderr.encoding).rstrip()
                raise DeliveryError(error, message)