Outlook Automation for reading email issues

tgmelbournetgmelbourne Member Posts: 3
Hi All,

I have been working on a requirement where we want to read emails from a particular email account and read the subject and then move it to another email address and do some processing on the subject of the mail. I tried using the outlook automation but stuck with few issues.

1. I am testing it from my computer and for some reasons it always try to read the email from my email account . I want it to read from a predfined email address and then fwd it to another email account.

2. I get some errors while my program proccess the mails like delete function failed not sure why that happens as i am trying to delete the email after it has been read .

Any help would be highly appriciated. Please see my code below.



CLEAR(RecServiceConParser);
RecServiceConParser.RESET;
RecServiceConParser.SETRANGE("Enable Remote Communication", TRUE);
IF RecServiceConParser.FINDFIRST THEN BEGIN
REPEAT
Init(RecServiceConParser);
NameSpace_GetIMAPFolder('www.xxxx');
SendAndReceive;

OutItems := OutMAPIFolder.Items;

i := 1;
intEndOfLoop := OutItems.Count;
WHILE i <= intEndOfLoop DO BEGIN
OutMailItem := OutItems.Item(i);
IF OutMailItem.UnRead= TRUE THEN BEGIN
IF OutMailItem.Subject <> '' THEN BEGIN
ReadSubject(OutMailItem.Subject, OutMailItem.ReceivedTime);
END;

OutMailItem."To"(RecServiceConParser."Outgoing E-Mail Address");
OutMailItem.Send;
OutMailItem.Delete;

It fails over here sometimes when trying to delete


END;

i := i + 1;
END;



UNTIL RecServiceConParser.NEXT = 0;

END;

CLEAR(OutMailItem);
CLEAR(OutApp);

Init(VAR RecServiceParser : Record "Service Contract Parser Setup")
OutNameSpace := OutApp.GetNamespace('MAPI');
OutNameSpace.Logon(RecServiceParser."Incoming E-Mail Address",RecServiceParser."Incoming E-Mail User Password",FALSE,TRUE);
OutFolders := OutNameSpace.Folders;
NameSpace_GetDefaultFolder('INBOX');

NameSpace_GetDefaultFolder(FolderName : Text[12])
//NameSpace_GetDefaultFolder()
IF FolderName = '' THEN
FolderName := 'INBOX';

CASE UPPERCASE(FolderName) OF
'DELETEDITEMS': OutMAPIFolder := OutNameSpace.GetDefaultFolder(3);
'OUTBOX' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(4);
'SENTMAIL' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(5);
'INBOX' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(6);
'CALENDER' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(9);
'CONTACTS' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(10);
'JOURNAL' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(11);
'NOTES' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(12);
'TASKS' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(13);
'REMINDERS' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(14);
'DRAFTS' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(16);
'PUBLIC' : OutMAPIFolder := OutNameSpace.GetDefaultFolder(18);
END; //CASE

Init_Items;

Init_Items()
OutItems := OutMAPIFolder.Items;
intItemPos := 0;

NameSpace_GetIMAPFolder(txtIMAPServer_L : Text[250])
IF OutFolders.Count <> 0 THEN
BEGIN
OutFolders.GetFirst;
FOR intI_L := 1 TO OutFolders.Count DO
IF OutFolders.Item(intI_L).Name = txtIMAPServer_L THEN
BEGIN
OutMAPIFolder := OutFolders.Item(intI_L).Folders.Item(1);
Init_Items;
EXIT;
END;
END;

SendAndReceive()
//SendAndReceive()
OutSyncObjects := OutNameSpace.SyncObjects;
OutSyncObject := OutSyncObjects.AppFolders;
OutMAPIFolder.InAppFolderSyncObject := TRUE;
OutSyncObject.Start;

Get_MailItem_ReceivedTime() : Date
//Get_MailItem_ReceivedTime()

EXIT(OutMailItem.ReceivedTime);

Get_MailItem_Subject() : Text[250]
//Get_MailItem_Subject()
MESSAGE('%1',OutMailItem.Subject);
EXIT(OutMailItem.Subject);

ReadSubject(SubjectLine : Text[250];ReceivedDate : Date)
SubjectLen := STRLEN(SubjectLine);

POEndingPosition := STRPOS(SubjectLine, '-');
PONumber := COPYSTR(SubjectLine,1,POEndingPosition - 1);

WOEndingPos := STRPOS(SubjectLine, '$');
WorkOrderNo := COPYSTR(SubjectLine,POEndingPosition +1,WOEndingPos-2 - POEndingPosition);

RemStr:= COPYSTR(SubjectLine, WOEndingPos+1, SubjectLen);

TotalAmtPos := STRPOS(RemStr, '-');
EVALUATE(TotalAmount, COPYSTR(RemStr,1, TotalAmtPos-1));

SiteLocationCodeTemp := COPYSTR(RemStr, TotalAmtPos+1, (STRLEN(RemStr) - TotalAmtPos));

Counter := 1;
CountEndOfLoop :=STRLEN(SiteLocationCodeTemp);
WHILE Counter <= CountEndOfLoop DO BEGIN
IF COPYSTR(SiteLocationCodeTemp, Counter,1 ) <> FORMAT(0) THEN BEGIN
SiteLocationPos := Counter;
Counter := CountEndOfLoop;
END;
Counter += 1;
END;

SiteLocationCode := COPYSTR(SiteLocationCodeTemp, SiteLocationPos, STRLEN(SiteLocationCodeTemp));


//Now Validate PO amount and update records in Nav with PO details

UpdateClientPODetails(PONumber, WorkOrderNo, TotalAmount, SiteLocationCode,ReceivedDate);

Comments

  • tgmelbournetgmelbourne Member Posts: 3
    hmm i think i have seen few posts on thie forum regarding outlook automation so wondering some one should be able to few things like can we define it somehow that it reads from a predefined email address from which it should read emails ??
Sign In or Register to comment.