2015-06-19 84 views
1

以下PowerShell腳本已適應我們的情況。 它讀取收件箱文件夾中的所有電子郵件,然後提取附件如何使用EWS將項目移動到文件夾?

它運行良好,但我想將項目移動到「/ Processed」郵箱根文件夾。此文件夾不是收件箱文件夾的子文件夾:

Mailbox 
L Inbox 
L Processed 
L Sent Items 
L Deleted Items 

如果我使用下面的行

[VOID]$miMailItems.Move("DeletedItems") 

然而,由於預期這是行不通的。它刪除了電子郵件,但在我的個人郵箱中,不是「john」郵箱!

所以,使用的代碼時,你能幫助我

  1. 更正代碼移動項目到約翰郵箱[VOID]$miMailItems.Move("DeletedItems")
  2. 讓我知道我可以簡單地移動物品的約翰「已處理」郵箱子文件夾?
$MailboxName = '[email protected]' 
$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) 

    # The following send items to my personal "Deleted Items" folder instead of the john mailbox... 
    [VOID]$miMailItems.Move("DeletedItems") 

    # How can I send items to the "/Processed" folder of the john mailbox ? 
} 

回答

1

Move方法將文件夾的FolderId要移動到,所以你需要先找到你想要移動到如

function FolderIdFromPath{ 
    param (
      $FolderPath = "$(throw 'Folder Path is a mandatory Parameter')", 
      $SmtpAddress = "$(throw 'Folder Path is a mandatory Parameter')" 
     ) 
    process{ 
     ## Find and Bind to Folder based on Path 
     #Define the path to search should be seperated with \ 
     #Bind to the 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 the Search path into an array 
     $fldArray = $FolderPath.Split("\") 
     #Loop through the Split Array and do a Search for each level of folder 
     for ($lint = 1; $lint -lt $fldArray.Length; $lint++) { 
      #Perform search based on the 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) 

該文件夾的FolderId項目然後只是改變

[VOID]$miMailItems.Move($SubFolder.Id) 
相關問題