def mailfrom(self, sender=None, client_args=None):
        """
        Send LMTP MAIL FROM command, and process the server response.

        In DLMTP mode, the server expects the client to identify itself.
        Because the envelope sender is of no importance to DSPAM, the client
        is expected to send an identity and a password (dspam.conf:
        ServerPass.<ident>="<password>") in stead of the actual sender.

        When you need want DSPAM to deliver the message itself and need to
        pass the server an actual envelope sender for that, add the
        --mail-from parameter in client_args.

        When the server is setup in LMTP mode only (dspam.conf:
        ServerMode=standard), the envelope sender is a regular envelope
        sender, and is re-used when delivering the message after processing.

        Client args
        ===========
        When in DLMTP mode (and with proper auth credentials), the server
        accepts parameters specified by the client. These are in the form
        as they are passed to the command-line 'dspam' program.
        See man dspam(1) for details, and the process() or classify() methods
        in this class for simple examples.

        Args:
        sender      -- The envelope sender to use in LMTP mode.
        client_args -- DSPAM parameters to pass to the server in DLMTP mode.

        """
        if sender and client_args:
            raise DspamClientError('Arguments are mutually exclusive')

        if client_args and not self.dlmtp:
            raise DspamClientError(
                'Cannot send client args, server does not support DLMTP')

        command = 'MAIL FROM:'
        if not sender:
            if self.dlmtp_ident and self.dlmtp_pass:
                sender = self.dlmtp_pass + '@' + self.dlmtp_ident
            else:
                sender = ''
        command = command + '<' + sender + '>'

        if client_args:
            command = command + ' DSPAMPROCESSMODE="{}"'.format(client_args)

        self._send(command + '\r\n')
        resp = self._read()
        if not resp.startswith('250'):
            raise DspamClientError(
                'Unexpected server response at MAIL FROM: ' + resp)
Send LMTP MAIL FROM command, and process the server response.

        In DLMTP mode, the server expects the client to identify itself.
        Because the envelope sender is of no importance to DSPAM, the client
        is expected to send an identity and a password (dspam.conf:
        ServerPass.<ident>="<password>") in stead of the actual sender.

        When you need want DSPAM to deliver the message itself and need to
        pass the server an actual envelope sender for that, add the
        --mail-from parameter in client_args.

        When the server is setup in LMTP mode only (dspam.conf:
        ServerMode=standard), the envelope sender is a regular envelope
        sender, and is re-used when delivering the message after processing.

        Client args
        ===========
        When in DLMTP mode (and with proper auth credentials), the server
        accepts parameters specified by the client. These are in the form
        as they are passed to the command-line 'dspam' program.
        See man dspam(1) for details, and the process() or classify() methods
        in this class for simple examples.

        Args:
        sender      -- The envelope sender to use in LMTP mode.
        client_args -- DSPAM parameters to pass to the server in DLMTP mode.