ews-javascript-api icon indicating copy to clipboard operation
ews-javascript-api copied to clipboard

Very strange situation with SortOrder

Open NAlexandrov opened this issue 4 months ago • 0 comments

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("[email protected]", 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>[email protected]</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>[email protected]</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?

NAlexandrov avatar Oct 07 '24 18:10 NAlexandrov