Move Emails From one folder to another usnig EWS manged API.

To Move Emails from One Folder to Another use the Below Scripts.
Note: This script is using Impersonation method, so you should use the account which has application impersonate rights.


#Moving Emails from one folder to Another
#Author: Sunil Chauhan
#Email:sunilkms@gmail.com
#URL:Sunil-Chauhan.blogspot.com

#NOTE: This script is using Impersonation method, so you should use the account which has application impersonate rights.

#Change The Below parameters as your requirement
#no of items to move
$items=10
#Mailbox to move from
$mailbox=testMbx@myCompany.com
#Impersonate user Account
#if you wants to use the defaults credentials from the logged on user, you can use below options.
#$Service.UseDefaultCredentials = $true
$userName=admin@mycompany.com
$password=MyPasswrod
#folder details
$SourceFolder = "SourceFolder"
$destinationFolder="DestinationFolder"
#EWS url for your orgnization
$uri=[system.URI] "https://myCompany.com/ews/exchange.asmx"
#define EWS Dll file Path
$dllpath = "D:\sunil\Microsoft.Exchange.WebServices.dll"

#-------------------------------------------------------------------------------------

$pass = $password
$AccountWithImpersonationRights = $userName
$MailboxToImpersonate = $mailbox
Import-Module $dllpath

## Set Exchange Version
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2

## Create Exchange Service Object
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)

$service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList $AccountWithImpersonationRights, $pass
$service.url = $uri

Write-Host 'Using ' $AccountWithImpersonationRights ' Account to work in ' $MailboxToImpersonate
$service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SMTPAddress,$MailboxToImpersonate );

#Connect to the Inbox
$MailboxRootid= new-object Microsoft.Exchange.WebServices.Data.FolderId `
([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot,$ImpersonatedMailboxName)
$MailboxRoot=[Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$MailboxRootid)

#Getting Folders in the Mailbox
# you can change to folder view if there are more them 100 folder in the mailbox
$FolderList = new-object Microsoft.Exchange.WebServices.Data.FolderView(100)
$FolderList.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep
$findFolderResults = $MailboxRoot.FindFolders($FolderList)

#identifying Source Folder
$SourceFolderView=$findFolderResults | ? {$_.DisplayName -match $SourceFolder}
$psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet `
([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$psPropset.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::HTML

#Retrieving items from Source Folder
$SourceFolderItemView=New-Object Microsoft.Exchange.WebServices.Data.ItemView($items)
$SourceFolderItems=$service.FindItems($SourceFolderView.Id,$SourceFolderItemView)
[Void]$service.LoadPropertiesForItems($SourceFolderItems,$psPropset)

#Identifying destination Folder
$trgFolder=$findFolderResults | ? {$_.DisplayName -match $destinationFolder}

# Now Moving All Items from Source Folder to Target Folder.

foreach ($EmailItem in $SourceFolderItems)
{
$EmailItem.move($trgFolder.id) | Out-null ;
write-host "Moved Item:" $EmailItem.subject
}

Comments