0

我需要一个 cron 作业来仅获取自上次同步以来在 Exchange 服务器中收到的新电子邮件。

我用 imap 服务器编写了相同的代码,并且由于 ID 很容易获取电子邮件。因此,我将 for 循环结束时的最后一个 ID 保存到数据库中,并在下次执行 cron 作业时从该 ID 恢复。

我在 Exchange 中尝试了相同的操作,但出现以下错误:无法搜索带有“ErrorInvalidValueForProperty: El valor especificado no es válido para la propiedad”的消息。

要在 Exchange 中获取 ItemId,我使用以下代码,没有错误:

$item->ItemId->Id;

它返回如下内容:

AAMkADk3ZWRhY2VmLTdiY2UtNDkxYy04ZDMyLWZiZWIyYTQ4ZjQyMABGAAAAAAChH5wDkXAqTZaoH1oRodz8BwD8BvGliMkPTK/cnnmZJDPUAAAAvGXfAAD8BvGliMkPTK/cnnmZJDPUAAAAvJN5AAA=

要查找电子邮件,我正在尝试以下代码(前面提到的错误):

$request = new FindItemType();
$request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType();
$request->Traversal = ItemQueryTraversalType::SHALLOW;

$greater_than = new IsGreaterThanOrEqualToType();
$greater_than->FieldURI = new PathToUnindexedFieldType();
$greater_than->FieldURI->FieldURI = UnindexedFieldURIType::ITEM_ID;
$greater_than->FieldURIOrConstant = new FieldURIOrConstantType();
$greater_than->FieldURIOrConstant->Constant = new ConstantValueType();
$greater_than->FieldURIOrConstant->Constant->Value = $UID;

谢谢!!

4

1 回答 1

0

EWS ItemId 不是一个可搜索的属性,因为它不需要是例如您可以绑定到有问题的 Id 以查看该项目是否存在。如果它不再存在,那么您将收到一个特定的错误来告诉您。SyncFolderItems 操作可能是更合适的使用方法,但是https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/syncfolderitems-operation

于 2018-07-16T04:36:39.900 回答