使用php-ews的cron作业只从Exchange服务器获取新电子邮件



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

我用imap服务器进行了同样的编码,从ID开始很容易获取电子邮件。因此,我将for循环结束时的最后一个ID保存到DB中,并在下次执行cron作业时从该ID继续。

我在Exchange中尝试了同样的操作,但出现以下错误:无法搜索带有"ErrorInvalidValueForProperty:El valor espificicado 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;

谢谢!!

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

相关内容

  • 没有找到相关文章

最新更新