PHP-EWS moves email to a folder

I use php-ews to get attachments and save them in a specific directory, and now I need to move the mail to another folder. I'm stuck here:

$client = new Client($host, $username, $password, $version); $request = new FindItemType(); $request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType(); // Return all message properties. $request->ItemShape = new ItemResponseShapeType(); $request->ItemShape->BaseShape = DefaultShapeNamesType::ALL_PROPERTIES; // Search in the user inbox. $folder_id = new DistinguishedFolderIdType(); $folder_id->Id = DistinguishedFolderIdNameType::INBOX; $request->ParentFolderIds->DistinguishedFolderId[] = $folder_id; $response = $client->FindItem($request); // Iterate over the results, printing any error messages or message subjects. $response_messages = $response->ResponseMessages->FindItemResponseMessage; foreach ($response_messages as $response_message) { // Make sure the request succeeded. if ($response_message->ResponseClass != ResponseClassType::SUCCESS) { $code = $response_message->ResponseCode; $message = $response_message->MessageText; continue; } $items = $response_message->RootFolder->Items->Message; foreach ($items as $item) { $subject = $item->Subject; $sender = $item->From->Mailbox->EmailAddress; //move mail item from folder "INBOX" to folder "DONE" } } 
+7
source share
2 answers

You need to use the MoveItem operation.

Create a class file. Save it in EWSType / MoveItemType.php

 <?php /** * Definition of the MoveItemType type * * @package php-ews * @subpackage Types */ /** * Definition of the MoveItemType type */ class EWSType_MoveItemType extends EWSType { /** * ToFolderId property * * @var EWSType_TargetFolderIdType */ public $ToFolderId; /** * DistinguishedFolderId property * * @var EWSType_DistinguishedFolderIdType */ public $DistinguishedFolderId; /** * ItemIds property * * @var EWSType_NonEmptyArrayOfBaseItemIdsType */ public $ItemIds; } 

Then do something like the below in your application code:

 // Generic connection sample code $ews = new ExchangeWebServices($host, $username, $password); $request = new EWSType_MoveItemType(); $request->ToFolderId->FolderId->Id = 'FOLDER_ITEM_ID_VALUE'; $request->ToFolderId->FolderId->ChangeKey = 'FOLDER_ITEM_CHANGE_KEY_VALUE'; $request->ItemIds->ItemId->Id = 'ITEM_ID_VALUE'; $request->ItemIds->ItemId->ChangeKey = 'ITEM_CHANGE_KEY_VALUE'; // Generic execution sample code $response = $ews->MoveItem($request); echo '<pre>'.print_r($response, true).'</pre>'; 
+1
source

Here is a working solution using php-ews 1.0

You can use the existing MoveItemType class

  $request = new MoveItemType(); $request->ItemIds = new NonEmptyArrayOfBaseItemIdsType(); $item_id = new ItemIdType(); $item_id->Id = 'foobarfoobar'; $request->ItemIds->ItemId[] = $item_id; $request->ToFolderId = new TargetFolderIdType(); $folder_id = new FolderIdType(); $folder_id->Id = $this->treatedFolderId; $request->ToFolderId->FolderId = 'barbar'; $response = $this->client->MoveItem($request); $response_messages = $response->ResponseMessages->MoveItemResponseMessage; foreach ($response_messages as $response_message) { // Make sure the request succeeded. if ($response_message->ResponseClass != ResponseClassType::SUCCESS) { // Error treatment ..... continue; } $items = $response_message->Items->Message; foreach ($items as $item) { // ... } } 
0
source

Source: https://habr.com/ru/post/1274792/


All Articles