powershell - How can I use EWS to move items to a folder? -
the following powershell script been adapted our situation. read emails in inbox folder extract attachments
it working move items "/processed" mailbox root folder. folder not subfolder of inbox folder :
mailbox l inbox l processed l sent items l deleted items
if use following line
[void]$mimailitems.move("deleteditems")
however, doesn't work expected. deleted email in personal mailbox, not "john" mailbox !
so, can me to
- correct code move items john mailbox when using code
[void]$mimailitems.move("deleteditems")
- let me know how can moving items john "processed" mailbox subfolder?
$mailboxname = 'john@domain.com' $downloaddirectory = '\\share\' $dllpath = "c:\program files\microsoft\exchange server\v15\bin\microsoft.exchange.webservices.dll" [void][reflection.assembly]::loadfile($dllpath) $service = new-object microsoft.exchange.webservices.data.exchangeservice([microsoft.exchange.webservices.data.exchangeversion]::exchange2013) $sidbind = "ldap://<sid=" + (get-aduser exchadmin).sid.tostring() + ">" $aceuser = [adsi]$sidbind $service.autodiscoverurl($aceuser.mail.tostring()) $folderid = new-object microsoft.exchange.webservices.data.folderid([microsoft.exchange.webservices.data.wellknownfoldername]::inbox,$mailboxname) $inboxfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$folderid) $sfha = new-object microsoft.exchange.webservices.data.searchfilter+isequalto([microsoft.exchange.webservices.data.emailmessageschema]::hasattachments, $true) $sfcollection = new-object microsoft.exchange.webservices.data.searchfilter+searchfiltercollection([microsoft.exchange.webservices.data.logicaloperator]::and); $sfcollection.add($sfha) $view = new-object microsoft.exchange.webservices.data.itemview(2000) $frfolderresult = $inboxfolder.finditems($sfcollection,$view) foreach ($mimailitems in $frfolderresult.items){ $mimailitems.load() foreach($attach in $mimailitems.attachments){ $attach.load() $fifile = new-object system.io.filestream(($downloaddirectory + “\” + (get-date).millisecond + "_" + $attach.name.tostring()), [system.io.filemode]::create) $fifile.write($attach.content, 0, $attach.content.length) $fifile.close() } $mimailitems.isread = $true $mimailitems.update([microsoft.exchange.webservices.data.conflictresolutionmode]::alwaysoverwrite) # following send items personal "deleted items" folder instead of john mailbox... [void]$mimailitems.move("deleteditems") # how can send items "/processed" folder of john mailbox ? }
the move method take folderid of folder want move item need first find folderid of folder want move eg
function folderidfrompath{ param ( $folderpath = "$( throw 'folder path mandatory parameter' )", $smtpaddress = "$( throw 'folder path mandatory parameter' )" ) process{ ## find , bind folder based on path #define path search should seperated \ #bind msgfolder root $folderid = new-object microsoft.exchange.webservices.data.folderid([microsoft.exchange.webservices.data.wellknownfoldername]::msgfolderroot,$smtpaddress) $tftargetfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$folderid) #split search path array $fldarray = $folderpath.split("\") #loop through split array , search each level of folder ($lint = 1; $lint -lt $fldarray.length; $lint++) { #perform search based on displayname of each folder level $fvfolderview = new-object microsoft.exchange.webservices.data.folderview(1) $sfsearchfilter = new-object microsoft.exchange.webservices.data.searchfilter+isequalto([microsoft.exchange.webservices.data.folderschema]::displayname,$fldarray[$lint]) $findfolderresults = $service.findfolders($tftargetfolder.id,$sfsearchfilter,$fvfolderview) if ($findfolderresults.totalcount -gt 0){ foreach($folder in $findfolderresults.folders){ $tftargetfolder = $folder } } else{ "error folder not found" $tftargetfolder = $null break } } if($tftargetfolder -ne $null){ return $tftargetfolder.id.uniqueid.tostring() } else{ throw "folder not found" } } } #example use $fldid = folderidfrompath -folderpath "\processed" -smtpaddress $aceuser.mail.tostring() $subfolderid = new-object microsoft.exchange.webservices.data.folderid($fldid) $subfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$subfolderid)
then change
[void]$mimailitems.move($subfolder.id)
Comments
Post a Comment