<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def data(self, email_message):
 """ Sends a SMTP 'DATA' command. - Transmits the message to the server. If ``email_message`` is a bytes object, sends it as it is. Else, makes all the required changes so it can be safely trasmitted to the SMTP server.` For further details, please check out `RFC 5321 § 4.1.1.4`_. Args: email_message (str or bytes):
 Message to be sent. Raises: ConnectionError subclass: If the connection to the server is unexpectedely lost. SMTPCommandFailedError: If the DATA command fails. Returns: (int, str):
 A (code, message) 2-tuple containing the server last response (the one the server sent after all data were sent by the client). .. seealso: :meth:`SMTP.prepare_message` .. _`RFC 5321 § 4.1.1.4`: https://tools.ietf.org/html/rfc5321#section-4.1.1.4 """

        code, message = await self.do_cmd("DATA", success=(354,))

        email_message = SMTP.prepare_message(email_message)

        self.writer.write(email_message)  # write is non-blocking.
        await self.writer.drain()  # don't forget to drain.

        code, message = await self.reader.read_reply()

        return code, message