Skip to content

Very strange situation with SortOrder #445

Description

@NAlexandrov

I've wrote a simple script:

import * as ews from 'ews-javascript-api';

const ex = new ews.ExchangeService(ews.ExchangeVersion.Exchange2016);

ex.Credentials = new ews.WebCredentials('username', 'password');
ex.Url = new ews.Uri('https://mail.server.local/Ews/Exchange.asmx');

ews.EwsLogging.DebugLogEnabled = true;

(async () => {
  const res = await ex.FindItems(
    ews.WellKnownFolderName.Inbox,
    'isRead:false',
    new ews.ItemView(100),
  );

  console.log(res);
})();

And I've got an empty response, but Inbox has an unread messages.

SOAP request by ews-javascript-api:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
  xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2016"></t:RequestServerVersion>
  </soap:Header>
  <soap:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>AllProperties</t:BaseShape>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="100" Offset="0" BasePoint="Beginning"></m:IndexedPageItemView>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox"></t:DistinguishedFolderId>
      </m:ParentFolderIds>
      <m:QueryString>isRead:false</m:QueryString>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

Then I've rewrite this script on python exchangelib

import logging
from exchangelib import Credentials, Account, Configuration, Version
from exchangelib.util import PrettyXmlHandler
from exchangelib.version import EXCHANGE_2016
from exchangelib.util import PrettyXmlHandler

logging.basicConfig(level=logging.DEBUG, handlers=[PrettyXmlHandler()])

credentials = Credentials("username", "password")
config = Configuration(server="mail.server.local", credentials=credentials, version=Version(EXCHANGE_2016))
account = Account("username@mail.server.local", config=config)

filtered_items = account.inbox.filter("isRead:false").order_by("datetime_received")

for item in filtered_items:
    print(item.subject, item.sender, item.datetime_received)

And I've got a list of messages.

SOAP request by exchangelib:

<?xml version='1.0' encoding='utf-8'?>
<s:Envelope
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <s:Header>
    <t:RequestServerVersion Version="Exchange2016"/>
    <t:ExchangeImpersonation>
      <t:ConnectingSID>
        <t:PrimarySmtpAddress>username@mail.server.local</t:PrimarySmtpAddress>
      </t:ConnectingSID>
    </t:ExchangeImpersonation>
  </s:Header>
  <s:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="100" Offset="0" BasePoint="Beginning"/>
      <m:SortOrder>
        <t:FieldOrder Order="Ascending">
          <t:FieldURI FieldURI="item:DateTimeReceived"/>
        </t:FieldOrder>
      </m:SortOrder>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox">
          <t:Mailbox>
            <t:EmailAddress>username@mail.server.local</t:EmailAddress>
            <t:RoutingType>SMTP</t:RoutingType>
            <t:MailboxType>Mailbox</t:MailboxType>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:ParentFolderIds>
      <m:QueryString>isRead:false</m:QueryString>
    </m:FindItem>
  </s:Body>
</s:Envelope>

The main difference in SOAP XML between ews-javascript-api and exchangelib is SortOrder tag. If I remove the sorting in exchangelib, I will also get an empty response. Is it possible to add SortOrder in ews-javascript-api?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions