Your exchnage sever may have POP3 mail box access set up. If it has it's fairly easy to get Mail::POP3Client to grab the mail. I've had to do this recently:
#!c:\strawberry\perl\bin\perl.exe
use Modern::Perl;
use Mail::POP3Client;
use MIME::QuotedPrint;
my $pop_user = 'XXXXXXXXXX';
my $pop_pass = 'XXXXXXXXXX';
my $pop_host = 'exchange3';
#connect to POP3 sever
my $pop = new Mail::POP3Client ( HOST => $pop_host );
$pop->User($pop_user);
$pop->Pass($pop_pass);
$pop->Connect()
or die "Unable to connect to POP3 server: ".$pop->Message()."\n";
#count number of items in POP3 mailbox
my $mailcount = $pop->Count();
for (my $i = 1; $i <= $mailcount ; $i++) {
my $header = $pop->Head($i); #gets the header
my $uni = $pop->Uidl($i); # gets the unquie id
my $body = $pop->Body($i);
$body = decode_qp($body); #decode quoted printable body
say "$uni";
say "$header\n";
say "$body";
}
Edit 27/07/2011@10:33BST Removed reference to subroutine not include in code &return_error and replaced with die | [reply] [d/l] [select] |
I tried to run this routine. The error message was:
"unable to connect to POP3 server: couldn't connect socket exchange3, 110; Invalid argument."
Any advise will be appreciated. Thanks in advance.
| [reply] |
So you don't have a server named "exchange" ... what is the name of your server?
| [reply] |
Well, if you want a really backwards way to do it ( which is how I do it! ), i do it like the following:
1. Set up a complex rule in Outlook so that when a message arrives, the following sequence occurs:
a) Outlook can start up a program for you in the rule, i use it to start my perl program, which waits for:
b) Run the following VB script to save the email to a local file, which your perl script is polling
Sub WriteEmailToFile(MyMail As MailItem)
Dim myMailEntryID As String
Dim myMailBody As String
Dim outlookNameSpace As Outlook.NameSpace
Dim outlookMail As Outlook.MailItem
myMailEntryID = MyMail.EntryID
Set outlookNameSpace = Application.GetNamespace("MAPI")
Set outlookMail = outlookNameSpace.GetItemFromID(myMailEntryID)
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
/ you can create a dynamic text file name is you want...
Set textFile = fileSystemObject.CreateTextFile("c:\temp\OutlookEma
+il.txt", True)
textFile.WriteLine (outlookMail.SenderEmailAddress)
textFile.WriteLine (outlookMail.SentOn)
textFile.WriteLine (outlookMail.Subject)
outlookMailBody = outlookMail.Body
'strip non-printing characters
For x = 127 To 255
While InStr(outlookMailBody, Chr(x)) > 0
outlookMailBody = Replace(outlookMailBody, Chr(x), "")
Wend
Next x
textFile.WriteLine (outlookMailBody)
textFile.Close
End Sub
| [reply] [d/l] |