我正在編寫一個php腳本來讀取Exchange Server 2010中的電子郵件。目前,我能夠檢索所有未讀電子郵件,但我想標記我擁有的電子郵件檢索爲已讀,因此我不檢索已經檢索到的郵件。我正在使用github的php-ews。我創建了一個腳本來執行此操作,但每次運行時,我都會在調用UpdateItem時出現此錯誤。PHP-EWS:爲消息設置IsRead標誌
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嵌套是正確的,因爲我已經提到Microsoft's EWS SOAP reference爲的updateItem功能是什麼原因造成這個錯誤。以下是我用來將郵件標記爲已讀的腳本的代碼。
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;
}
我嘗試使用SoapClient的__getLastRequest()和__getLastResponse()從服務器轉儲發送和接收的XML。 '功能。但是,即使發送請求,我的代碼仍然失敗。我會用堆棧跟蹤來更新我的問題,它顯示了我最初忽略的內容。 – linuxjedi