Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Destination folder
- $destinationFolder = "C:\Users\marius\Downloads\Attachment Downloader"
- # replace with your email address
- $email = "username@mytenant.onmicrosoft.com"
- $username = "username@mytenant.onmicrosoft.com"
- $password = "Password123!"
- # File extensions to download
- $extensions = "pdf","pdfa","doc","docx","dot","dotx","xls","xlsx","ppt","pptx"
- # load the assembly
- Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
- # Create Exchange Service object
- $s = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1)
- $s.Credentials = New-Object Net.NetworkCredential($username, $password)
- # $s.TraceEnabled = $true
- Write-Host "Trying AutoDiscover... "
- $s.AutodiscoverUrl($email, {$true})
- if(!$s.Url) {
- Write-Error "AutoDiscover failed"
- return;
- } else {
- Write-Host -ForegroundColor Green "AutoDiscover succeeded - $($s.Url)"
- }
- # Create destination folder
- $destinationFolder = "{0}\{1}" -f $destinationFolder, (Get-Date -Format "yyyyMMdd HHmmss")
- mkdir $destinationFolder | Out-Null
- # get a handle to the inbox
- $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($s,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
- #create a property set (to let us access the body & other details not available from the FindItems call)
- $psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
- $psPropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text;
- # Find the items
- $inc = 0;
- $maxRepeat = 50;
- do {
- $maxRepeat -= 1;
- Write-Host "Searching for items in mailbox... " -NoNewline
- $items = $inbox.FindItems(100)
- Write-Host -ForegroundColor Green "found $($items.items.Count)"
- foreach ($item in $items.Items)
- {
- # Create mail folder
- $inc += 1
- $mailFolder = "{0}\{1}" -f $destinationFolder, $inc;
- mkdir $mailFolder | Out-Null
- # load the property set to allow us to get to the body
- try {
- $item.load($psPropertySet)
- Write-Host ("$inc - $($item.Subject)") -ForegroundColor Yellow
- # save the metadata to a file
- $item | Export-Clixml ("{0}\metadata.xml" -f $mailFolder)
- # save all attachments
- foreach($attachment in $item.Attachments) {
- if(($attachment.Name -split "\." | select -last 1) -in $extensions) {
- Write-Host " - $($attachment.Name) - $([Math]::Round($attachment.Size / 1024))KB"
- $fileName = ("{0}\{1}" -f $mailFolder, $attachment.Name) -replace "/",""
- $attachment.Load($fileName)
- }
- }
- # delete the mail item
- $item.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true)
- } catch [Exception] {
- Write-Error "Unable to load item: $($_)"
- }
- }
- } while($items.MoreAvailable -and $maxRepeat -ge 0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement