PowerShell
PowerShell
Scan for Emails with Attachments and Save Attachments to Files
Scan for emails with attachments and save attachments.Chilkat PowerShell Downloads
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"
$success = $false
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$imap = New-Object Chilkat.Imap
# Connect to an IMAP server.
# Use TLS
$imap.Ssl = $true
$imap.Port = 993
$success = $imap.Connect("imap.example.com")
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
# Login
$success = $imap.Login("myLogin","myPassword")
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
# Select an IMAP mailbox
$success = $imap.SelectMailbox("Inbox")
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
# We can choose to fetch UIDs or sequence numbers.
$fetchUids = $true
# Get the message IDs of all the emails in the mailbox
$messageSet = New-Object Chilkat.MessageSet
$success = $imap.QueryMbx("ALL",$fetchUids,$messageSet)
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
# Fetch the email headers into a bundle object:
$bundle = New-Object Chilkat.EmailBundle
$headersOnly = $true
$success = $imap.FetchMsgSet($headersOnly,$messageSet,$bundle)
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
# Scan for emails with attachments, and save the attachments
# to a sub-directory.
$fullEmail = New-Object Chilkat.Email
$emailHeader = New-Object Chilkat.Email
$i = 0
while ($i -lt $bundle.MessageCount) {
# The bundle contains email headers..
$bundle.EmailAt($i,$emailHeader)
# Does this email have attachments?
# Use GetMailNumAttach because the attachments
# are not actually in the email object because
# we only downloaded headers.
$numAttach = $imap.GetMailNumAttach($emailHeader)
if ($numAttach -gt 0) {
# Download the entire email and save the
# attachments. (Remember, we
# need to download the entire email because
# only the headers were previously downloaded.
# The ckx-imap-uid header field is added when
# headers are downloaded. This makes it possible
# to get the UID from the email object.
$uidStr = $emailHeader.GetHeaderField("ckx-imap-uid")
$uid = $uidStr
$success = $imap.FetchEmail($false,$uid,$true,$fullEmail)
if ($success -eq $false) {
$($imap.LastErrorText)
exit
}
$success = $fullEmail.SaveAllAttachments("attachmentsDir")
for ($j = 0; $j -le $numAttach - 1; $j++) {
$filename = $imap.GetMailAttachFilename($emailHeader,$j)
$($filename)
}
}
$i = $i + 1
}
# Disconnect from the IMAP server.
$success = $imap.Disconnect()