Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
PowerShell scripts to archive old messages from Inbox
. ./script-library.ps1
[console]::OutputEncoding = New-Object System.Text.UTF8Encoding
$mailboxName = "<mailboxname>"
$outlook = new-object -com outlook.application;
Write-ColorText -Green "[✓] Connected to Outlook"
$ns = $outlook.GetNameSpace("MAPI");
$mailbox = $ns.Folders.Item($mailboxName)
$inbox = $mailbox.Folders.Item("Inbox")
Write-ColorText -Green "[✓] Found Inbox"
$archiveFolder = $mailbox.Folders.Item("Archive")
Write-ColorText -Green "[✓] Found Archive Folder"
$yearFolder = $null
$monthFolder = $null
$messages = $inbox.Items
$messageCount = $messages.Count
Write-ColorText -Gray "[○] Scanning $messageCount messages"
$threshold = (get-date).AddDays(-90).Date
Write-ColorText -White "[○] Moving messages received prior to " $threshold.ToString("D")
foreach ($m in $messages) {
if ($m.Subject.Length -gt 40) {
$subject = $m.Subject.Substring(0, 40)+"..."
} else {
$subject = $m.Subject
}
$date = $m.ReceivedTime
if ($date -ge $threshold) {
#Write-ColorText -Gray "[•] Skipping " -White $subject -Gray " received " $date.ToString("s")
continue
}
$year = $date.ToString("yyyy")
if ($yearFolder.Name -ne $year) {
$yearFolder = $archiveFolder.Folders.Item($year)
Write-ColorText -Gray "[•] Found Archive for " -White $year
}
$month = $date.ToString("yyyy-MM")
if ($monthFolder.Name -ne $month) {
$monthFolder = $yearFolder.Folders.Item($month)
Write-ColorText -Gray "[•] Found Archive for " -White $month
}
$updated = $m.Move($monthFolder)
Write-ColorText -Green "[✓]" -White " Moved " -Green $subject -White " received " -Green $date.ToString("s") -White " from " -Green $m.SenderName -White " to " -Green $month
}
# Closely based on code from Stack Overflow
# see https://stackoverflow.com/a/30265949/30280
function Write-ColorText
{
# DO NOT SPECIFY param(...)
# we parse colors ourselves.
$allColors = (
"-Black", "-DarkBlue","-DarkGreen","-DarkCyan","-DarkRed","-DarkMagenta","-DarkYellow","-Gray",
"-Darkgray","-Blue", "-Green", "-Cyan", "-Red", "-Magenta", "-Yellow", "-White",
"-Foreground"
)
$color = "Foreground"
$nonewline = $false
foreach($arg in $args)
{
if ($arg -eq "-nonewline")
{
$nonewline = $true
}
elseif ($allColors -contains $arg)
{
$color = $arg.substring(1)
}
elseif ($color -eq "Foreground")
{
Write-Host $arg -nonewline
}
else
{
Write-Host $arg -foreground $color -nonewline
}
}
Write-Host -nonewline:$nonewline
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.