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);
0
Comments