code: def get_folder(opts)
        opts = opts.clone
        [:folder_ids, :folder_shape].each do |k|
          validate_param(opts, k, true)
        end
        validate_param(opts[:folder_shape], :base_shape, true)
        req = build_soap! do |type, builder|
          if(type == :header)
          else
            builder.nbuild.GetFolder {
              builder.nbuild.parent.default_namespace = @default_ns
              builder.folder_shape!(opts[:folder_shape])
              builder.folder_ids!(opts[:folder_ids], opts[:act_as])
            }
          end
        end
        do_soap_request(req)
      end
docs: Gets folders from the Exchange store
   @see http://msdn.microsoft.com/en-us/library/aa580274.aspx
  
   @param [Hash] opts
   @option opts [Array<Hash>] :folder_ids An array of folder_ids in the form:
     [ {:id => 'myfolderID##asdfs', :change_key => 'asdfasdf'},
       {:id => :msgfolderroot} ]
   @option opts [Hash] :folder_shape defines the FolderShape node
   @option folder_shape [String] :base_shape IdOnly/Default/AllProperties
   @option folder_shape :additional_properties
   @option opts [String,nil] :act_as User to act on behalf as. This user must
     have been given delegate access to this folder or else this operation
     will fail.
   @example
     { :folder_ids   => [{:id => :msgfolderroot}],
       :folder_shape => {:base_shape => 'Default'} }