PHP-EWS 2010,如何设置 IsRead 标志

标签 php set exchangewebservices exchange-server-2010

我已经能够使用 php-ews API 从 Exchange 2010 收件箱中成功检索未读电子邮件。但是,在我获取电子邮件后,我想将电子邮件的 IsRead 属性设置为 true,以便下次我获取电子邮件时不会出现这些消息。

以前有人做过吗?

编辑:

这就是我尝试设置 IsRead 标志的方式:

$message_id = ''; //id of message
$change_key = ''; //change key   
$response = $ews->GetItem($request);
        //print_r($response);exit;
        if( $response->ResponseMessages->GetItemResponseMessage->ResponseCode == 'NoError' &&
            $response->ResponseMessages->GetItemResponseMessage->ResponseClass == 'Success' ) {

            $a = array();
            $message = $response->ResponseMessages->GetItemResponseMessage->Items->Message;

            $a['message_body'] = $message->Body->_;
            $a['sender'] = $message->From->Mailbox->EmailAddress;
            $a['subject'] = $message->ConversationTopic;

            $data[] = $a;
            //process the message data.

            $messageType = new EWSType_MessageType();
            $messageType->IsRead = true;

            $path = new EWSType_PathToUnindexedFieldType();
            $path->FieldURI = 'message:IsRead';

            $setField = new EWSType_SetItemFieldType();
            $setField->Message = $messageType;
            $setField->FieldURI = $path;


            $u = new EWSType_ItemChangeType();
            $u->Updates = new EWSType_NonEmptyArrayOfItemChangeDescriptionsType();
            $u->Updates->SetItemField = $setField;
            $u->ItemId = new EWSType_ItemIdType();
            $u->ItemId->Id = $message_id;
            $u->ItemId->ChangeKey = $change_key;

            $updatedItems = new EWSType_NonEmptyArrayOfItemChangesType();
            $updatedItems->ItemChange = $u;

            $updateMessenger = new EWSType_UpdateItemType();
            $updateMessenger->ItemChanges = $updatedItems;
            $updateMessenger->MessageDisposition = 'SaveOnly';
            $updateMessenger->ConflictResolution = 'AutoResolve';

            try {
                $update_response = $ews->UpdateItem($updateMessenger);
            }catch (Exception $e){
                echo $e->getMessage();
            }
        }

当我运行该文件时,出现以下错误:

An internal server error occurred. The operation failed.

经过一段时间的调试,我断定错误发生在NTLMSoapClient.php文件中的curl_exec函数。

我不知道从哪里开始。请帮忙。

最佳答案

我在更新日历事件和设置 IsAllDayEvent 标志时遇到了类似的问题。这是对我有用的代码:

$ews = new ExchangeWebServices(...);

$request = new EWSType_UpdateItemType();
$request->ConflictResolution = 'AlwaysOverwrite';
$request->ItemChanges = array();

$change = new EWSType_ItemChangeType();
$change->ItemId = new EWSType_ItemIdType();
$change->ItemId->Id = $id;
$change->ItemId->ChangeKey = $changeKey;

$field = new EWSType_SetItemFieldType();
$field->FieldURI = new EWSType_PathToUnindexedFieldType();
$field->FieldURI->FieldURI = "calendar:IsAllDayEvent";
$field->CalendarItem = new EWSType_CalendarItemType();
$field->CalendarItem->IsAllDayEvent = true;

$change->Updates->SetItemField[] = $field;

$request->ItemChanges[] = $change;
$response = $ews->UpdateItem($request);

我在这里看到的最大区别是您执行 $u->Updates->SetItemField = $setField;,而我的代码使用 $u->Updates->SetItemField[] = $setField;.

希望对您有所帮助。

编辑:您可能已经看过这个,但我的代码基于 php-ews wiki 中的代码.

关于PHP-EWS 2010,如何设置 IsRead 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354190/

相关文章:

java - arrayset 没有 Java 实现

Common Lisp 中的集合操作 A\B

c# - Exchange Web 服务 : Batching with FindItemsResult<Item>

php - 如何通过一个查询批量更新 mysql 数据?

php - MySql PHPmyadmin 错误 #1062

php - Laravel 5.8 刷新数据库而不丢失已存在表中的数据

algorithm - 查找所有集不包含任何子集

vb.net - 邮箱和 Active Directory 帐户创建自动化

c# - Exchange Web 服务附件集合为空

php - 从 mysql_query 切换到 PDO 的问题