【发布时间】:2019-01-30 21:08:38
【问题描述】:
我正在编写一个 php 脚本来读取来自 Exchange Server 2010 的电子邮件。目前,我能够检索所有未读的电子邮件,但我想将我检索到的电子邮件标记为已读,所以我不检索我已经再次检索到的消息。我正在使用来自 github 的php-ews。我创建了一个脚本来执行此操作,但每次运行时,当我调用 UpdateItem 时都会出现此错误。
PHP Fatal error: SOAP-ERROR: Encoding: object has no 'Path' property
Stack Trace:
#0 ExchangeClient.php(355): SoapClient->__call('UpdateItem', Array)
#1 ExchangeClient.php(355): NTLMSoapClient->UpdateItem(Object(UpdateItemType))
#2 markReadTest.php(20): ExchangeClient->mark_as_read(Object(stdClass))
#3 ExchangeClient.php on line 355
我注意到是什么导致了这个错误,因为我认为我所有的 SOAP 嵌套都是正确的,因为我一直在为 UpdateItem 函数引用 Microsoft's EWS SOAP reference。这是我用来将消息标记为已读的脚本代码。
public function mark_as_read($ReadMessage)
{
$request = new EWSType_UpdateItemType();
$request->MessageDisposition = 'SaveOnly';
$request->ConflictResolution = 'AlwaysOverwrite';
$request->ItemChanges = array();
$change = new EWSType_ItemChangeType();
$change->ItemId = new EWSType_ItemIdType();
$change->ItemId->Id = $ReadMessage->ItemId->Id;
$change->ItemId->ChangeKey = $ReadMessage->ItemId->ChangeKey;
$field = new EWSType_SetItemFieldType();
$field->FieldURI = new EWSType_PathToUnindexedFieldType();
$field->FieldURI->FieldURI = 'message:IsRead';
$field->Message = new EWSType_MessageType();
$field->Message->IsRead = True;
$change->Updates->SetItemField[] = $field;
$request->ItemChanges[] = $change;
$response = $this->client->UpdateItem($request);
return $response;
}
【问题讨论】:
标签: php soap exchangewebservices