code: def wrap(content, version, account=None):
      
      envelope = create_element('s:Envelope', nsmap=ns_translation)
      header = create_element('s:Header')
      requestserverversion = create_element('t:RequestServerVersion', Version=version)
      header.append(requestserverversion)
      if account:
          if account.access_type == IMPERSONATION:
              exchangeimpersonation = create_element('t:ExchangeImpersonation')
              connectingsid = create_element('t:ConnectingSID')
              add_xml_child(connectingsid, 't:PrimarySmtpAddress', account.primary_smtp_address)
              exchangeimpersonation.append(connectingsid)
              header.append(exchangeimpersonation)
          timezonecontext = create_element('t:TimeZoneContext')
          timezonedefinition = create_element('t:TimeZoneDefinition', Id=account.default_timezone.ms_id)
          timezonecontext.append(timezonedefinition)
          header.append(timezonecontext)
      envelope.append(header)
      body = create_element('s:Body')
      body.append(content)
      envelope.append(body)
      return xml_to_str(envelope, encoding=DEFAULT_ENCODING, xml_declaration=True)
docs: Generate the necessary boilerplate XML for a raw SOAP request. The XML is specific to the server version.
      ExchangeImpersonation allows to act as the user we want to impersonate.