Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Daily report of quarantined e-mails in Exchange 2007

Posted on 2010-09-22
11
Medium Priority
?
589 Views
Last Modified: 2012-05-10
Hi, in our office we have a quarantine mailbox where all of our non-rejected spam goes.  Naturally, once in awhile it picks up message that are not spam.

Rather than having everyone check this spam inbox, I was thinking it would be really cool to automate this so that everyone would get a report each day of the messages that were sent to them and quarantined on the previous day.

So basically I'm guessing it would be a powershell script that queries the spam inbox, by date and To: field, and then sends an email to that person, listing the From: field and message subject.

What is the best way to do this?
0
Comment
Question by:jamorlando
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 3
11 Comments
 
LVL 8

Expert Comment

by:Mkris9
ID: 33735391
dont think its possible to use powershell to get the list of emails in a mailbox. but saying that i found the following to get the list of flagged emails

http://blogs.technet.com/b/heyscriptingguy/archive/2009/12/14/hey-scripting-guy-december-14-2009.aspx
0
 

Author Comment

by:jamorlando
ID: 33735759
I tested this script on my computer and it worked.

So basically, I would need to set up a new machine with Outlook installed and have the default inbox be our spam inbox.  Then I would schedule a nightly powershell script to run.

Before I go further, is this the best way to do this?  Is there free software out there that already handles this?
0
 
LVL 8

Expert Comment

by:Mkris9
ID: 33735784
Not that i know of. but can always suggest the best teacher. www.google.com.. :)
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:jamorlando
ID: 33735802
Never heard of it.  I use askjeeves.com (kidding)
0
 
LVL 8

Expert Comment

by:Mkris9
ID: 33735829
never heard of that as well.. ;). heard something about someone having a some sort of a search engine called 'ding'.. ;)
0
 
LVL 12

Expert Comment

by:GusGallows
ID: 33743490
I did something similar years ago, with the help of Sue Mosher, using a server side VB script that hit a Public Folder to generate a daily email containing all new messages of the day. I will see if I can find it and convert it to work with a mailbox. No promises, this is from the Exchange 2000 days and much has changed, but it stands to reason that it should still be possible.
0
 

Author Comment

by:jamorlando
ID: 33876280
Gus, were you ever able to find that script?
0
 

Author Comment

by:jamorlando
ID: 33884236
I set up a PC with Outlook installed with the Spam inbox.  Opened up a new thread in the Outlook forum.
http://www.experts-exchange.com/Software/Office_Productivity/Groupware/Outlook/Q_26535480.html
0
 

Author Comment

by:jamorlando
ID: 33908165
First step ... I am able to export email folders from a date range to a PST file.

Export-Mailbox -Identity SPAM -IncludeFolders '\Inbox\Joe' -StartDate "10/13/2010" -EndDate "10/13/2010" -PSTFolderPath 'C:\Joe Yesterday Spam.pst'

Anyone know how to convert this to a .csv or .txt file so that I can parse it with a script?
0
 

Accepted Solution

by:
jamorlando earned 0 total points
ID: 33948252
0
 

Author Comment

by:jamorlando
ID: 33983802
Actually ... I adandoned PSTViewerPro, because it's buggy.
I buckled down and forced myself to write some powershell.
Here's my script.  (To have this work you need to have message rules set up that puts people's quarantined spam into a subfolder with the inbox)

#Script by Jamie Orlando
#Last updated: 10/25/2010
#
#Recurses through subfolders in Inbox and e-mails each user the headers from their spam messages on the previous day
#
#***   Make sure the following command is entered into PowerShell before proceeding:
#***   Set-ExecutionPolicy RemoteSigned

$olFolderInbox = 6
$ol = new-object -comobject "Outlook.Application"
$mapi = $ol.getnamespace("mapi")
$inbox = $mapi.GetDefaultFolder($olFolderInbox)
$inboxFolders = $inbox.Folders | Select Name
$yesterdayDate = (Get-Date).AddDays(-1).toShortDateString()

foreach ($CurrentFolder in $inboxFolders)
{
   $CurrentRecipient = $CurrentFolder.Name  

   $msgs = $inbox.Folders.Item("$CurrentRecipient")
   $countSpam = 0
   
   foreach ($CurrentMsg in ($msgs.items | Sort-Object CreationTime))
   {
      $CurrentMessageDate = $CurrentMsg.CreationTime.toShortDateString()

      if($CurrentMessageDate -eq $yesterdayDate)
      {
         $CurrentMsg.Body | Out-File -Filepath C:\spambody.txt
         "Time: " + $CurrentMsg.CreationTime.toShortTimeString() | Out-File "C:\spamreport.txt" -Append
         $EmailFrom = select-string -pattern "From: " C:\spambody.txt | Select-Object Line | Select -First 1
         $EmailFrom.Line | Out-File "C:\spamreport.txt" -Append
         $EmailSubject = select-string -pattern "Subject: " C:\spambody.txt | Select-Object Line | Select -First 1
         $EmailSubject.Line | Out-File "C:\spamreport.txt" -Append
         "" | Out-File "C:\spamreport.txt" -Append
         remove-item "c:\spambody.txt"
         $countSpam++
      }
   }

   if($countSpam -ge 1)
   {
      $SendingServer = "EXCHANGE01.ourcompany.com"
      $FromAddress = "SPAM@ourcompany.com"
      $ToAddress = $CurrentRecipient + "@ourcompany.com"
      $MessageSubject = $countSpam + " message(s) were quarantined on: " + $yesterdayDate
      $SpamOutput = Get-Content "c:\spamreport.txt" | Out-String

      $MessageBody = @"
On $yesterdayDate, $countSpam spam messages were quarantined for $CurrentRecipient.
If any of these messages are not spam, please e-mail IT_NOTIFY@ourcompany.com to retrieve the message.
Thank you,
IT Staff
------------
 
$SpamOutput
"@

      $SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
      $SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
      $SMTPClient.Send($SMTPMessage)

      remove-item "c:\spamreport.txt"
   }
}
0

Featured Post

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will help to fix the below error for MS Exchange server 2010 I. Out Of office not working II. Certificate error "name on the security certificate is invalid or does not match the name of the site" III. Make Internal URLs and External…
A couple of months ago we ran into an issue that necessitated re-creating our Edge Subscriptions. However, when we attempted to execute the command: New-EdgeSubscription -filename C:\NewEdgeSub_01.xml we received an error indicating that the LDAP se…
In this video we show how to create a Contact in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: First we need to log into the Exchange Admin Center. Navigate to the Recipients >> Contact ta…
This video demonstrates how to sync Microsoft Exchange Public Folders with smartphones using CodeTwo Exchange Sync and Exchange ActiveSync. To learn more about CodeTwo Exchange Sync and download the free trial, go to: http://www.codetwo.com/excha…

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question