Thanks to a few other posts that gave me the core code for this script

I know this script is a little dependency heavy and relies
on you having Office 2007 so that you can disable the programmatic
access warnings but it feels fairly robust

Several uses were the inspiration for this script such as having
roving users drop files into and intranet folder, staff
who fill up their mailboxes can filter out the attachments into sender related
folders locally to clear down and a few more esoteric ones

Extra rules can be added near the bottom for post process
movement so that mail from specific people can be
redirected into completely different folders

I hope this helps someone to achieve something similar
it relies on having a few funky gif icons and a config file like:


[main]
test_mode=0
run_on_startup=1
hide_DOS_box=1
seconds_between_checks=20
root_destination_path=//server/share/DropBox/
delete_on_read=1
delete_moved_documents_from_drop_box=1;


#!/usr/bin/perl #pragmas use strict; use warnings; #modules use Tk; use Tk::Image; use Win32; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Outlook'; use Win32::GUI(); use Config::IniFiles; use File::Copy; #load config ini my $config = new Config::IniFiles( -file => "config.ini" ); #hide DOS box if($config->val('main','hide_DOS_box')){my $DOS = Win32::GUI::GetPerlW +indow();Win32::GUI::Hide($DOS);} #global status and root path my $status; my $root_destination_path=$config->val('main','root_destination_path') +; #test mode my $test_mode=$config->val('main','test_mode'); #create GUI my $window = MainWindow->new; $window->title("Monitoring emails"); $window->iconimage($window->Photo(-file => 'ico.gif')); my $photo=$window->Photo(-file => 'start.gif'); my $left_frame=$window->Frame(-padx=>10,-pady=>10)->pack(-side => 'lef +t', -anchor => 'w'); my $right_frame=$window->Frame(-padx=>10,-pady=>10)->pack(-side => 'ri +ght', -anchor => 'e'); my $main_frame_button = $left_frame->Button(-command=>\&main_frame_but +ton_pressed,-image => $photo)->pack(); #set monitor refresh $window->repeat(1000*$config->val('main','seconds_between_checks'),\&e +xecute_monitor); #launch monitor on startup if($config->val('main','run_on_startup')){&start_monitor();&execute_mo +nitor();} #execute GUI MainLoop; ######################################################### # SUBROUTINES # ######################################################### sub start_monitor{ $status=1; $photo->configure(-file=>'stop.gif'); } sub stop_monitor{ $status=0; $photo->configure(-file=>'start.gif'); } sub execute_monitor{ if($status){ my $outlook=Win32::OLE->new('Outlook.Application') or die "Can +not create outlook object\nError:"; my $namespace = $outlook->GetNamespace("MAPI"); my $folder = $namespace->GetDefaultFolder(olFolderInbox); my $items = $folder->Items; for my $itemIndex (1..$items->Count){ my $message = $items->item($itemIndex); next if not defined $message; my $attach = $message->Attachments(); if (defined $attach){ for my $attach_index (1..$attach->Count){ my $attachment = $attach->item($attach_index); my $filename = $attachment->Filename; mkdir($root_destination_path.$message->SenderName) +; my $saveas = $root_destination_path.$message->Send +erName."/$filename"; if(! -e $saveas){ $attachment->SaveAsFile($saveas); if($test_mode){ Win32::MsgBox("Saving attachment from ".$m +essage->SenderName." to $saveas\n"); } } } } if($config->val('main','delete_on_read')){$message->Delete +;} } } &apply_rules(); } sub main_frame_button_pressed(){ if($status==0){ &start_monitor(); }else{ &stop_monitor(); } } sub apply_rules{ #define rules for additional file movement my %rules = ( "Senders email name"=>"$root_destination_path/fh", "Senders email name"=>"$root_destination_path/so", ); #make sure directories exists foreach(keys %rules){ mkdir $rules{$_}; } my @directories_to_search = <$root_destination_path*>; foreach my $directory(@directories_to_search){ $directory=~m/^.*\/(.*?)\s?$/; if(-d $directory){ my $new_root=$rules{"$1"}; if($new_root){ my @files_to_move = <"$directory"/*>; foreach my $file (@files_to_move){ my $from_path = $file; $file=~s/$directory/$new_root/; if($config->val('main','delete_moved_documents_fro +m_drop_box')){ move($from_path,$file); }else{ copy($from_path,$file); } } } } } }


In reply to Downloading attachments into sender folders in Win32::OLE using Outlook by Intranaut

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.