docs: def lhlo(self):
          """
          Send LMTP LHLO greeting, and process the server response.
  
          A regular LMTP greeting is sent, and if accepted by the server, the
          capabilities it returns are parsed.
  
          DLMTP authentication starts here by announcing the dlmtp_ident in
          the LHLO as our hostname. When the ident is accepted and DLMTP
          mode is enabled (dspam.conf: ServerMode=dspam|auto), the
          DSPAMPROCESSMODE capability is announced by the server.
          When this capability is detected, the <DspamClient>.dlmtp flag
          will be enabled.
  
          """
          if self.dlmtp_ident is not None:
              host = self.dlmtp_ident
          else:
              host = socket.getfqdn()
          self._send('LHLO ' + host + '\r\n')
  
          finished = False
          while not finished:
              resp = self._read()
              if not resp.startswith('250'):
                  raise DspamClientError(
                      'Unexpected server response at LHLO: ' + resp)
              if resp[4:20] == 'DSPAMPROCESSMODE':
                  self.dlmtp = True
                  logger.debug('Detected DLMTP extension in LHLO response')
              if resp[3] == ' ':
                  # difference between "250-8BITMIME" and "250 SIZE"
                  finished = True