Tech Articles


Reading MS Outlook Items


Here is some code which reads data from Outlook (2007 was tested) into Powerbuilder. You basically need to create a window with a multiline edit and a button on it. Put this into the clicked event of the button.

To run it, open Outlook, select something (email message, task, etc.) then click the button on your PB window. There are many, many more methods and properties you have access to from PB via OLE to Outlook. The MSDN reference online is a big help

integer li_rc
long ll_itemcount, ll_i
oleobject lole_item, lole_outlook, lole_exp, lole_selecteditems
string ls_subject, ls_from, ls_to, ls_body, ls_msg
lole_outlook = CREATE oleobject
lole_exp = CREATE oleobject
lole_selecteditems = CREATE oleobject
li_rc = lole_outlook.ConnectToNewObject("outlook.application")
lole_exp = lole_outlook.ActiveExplorer()
// Outlook has to be running
If IsNull(lole_exp) THEN
    Messagebox('Outlook Error','Is Outlook currently running?')
    GOTO cleanup
END IF
li_rc = lole_exp.class
// caption is window name like "Inbox - Microsoft Outlook" or "Calendar - Microsoft Outlook"
ls_subject = lole_exp.caption

lole_selecteditems = lole_exp.selection
ll_itemcount = lole_selecteditems.count
FOR ll_i = 1 to ll_itemcount
    lole_item = CREATE oleobject
    lole_item = lole_exp.selection.item(ll_i)
    li_rc = lole_item.class
    CHOOSE CASE li_rc
        CASE 26 //appointment
            ls_body = lole_item.body
            ls_msg += '~r~n Appointment No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_body
            // lots of other stuff could be here
        CASE 40 // contact
            ls_body = lole_item.body
            ls_msg += '~r~n Contact No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_body
            
        CASE 43 // mail
            ls_subject = lole_item.subject
            ls_from = lole_item.sendername
            ls_to = lole_item.to
            ls_body = lole_item.body
            ls_msg = '~r~nSubject: ' + ls_subject + '~r~nFrom: ' + ls_from + '~r~nTo: ' + ls_to + '~r~nBody: ' + ls_body
            ls_msg += '~r~n Email No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_msg
            
        CASE 48 // task
            ls_subject = lole_item.subject
            ls_to = lole_item.owner
            ls_body = lole_item.body
            ls_msg = '~r~nSubject: ' + ls_subject + '~r~nOwner: ' + ls_to + '~r~nBody: ' + ls_body
            ls_msg += '~r~n Task No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_msg
            
    END CHOOSE
    DESTROY lole_item
NEXT
IF Len(ls_msg) > 0 THEN
    mle_1.text = ls_msg
ELSE
    mle_1.text = 'No items processed.'
END IF
cleanup:
DESTROY lole_selecteditems
DESTROY lole_exp
DESTROY lole_outlook
Comments (1)
Thursday, Apr 20 2017

If you also want to do anything that changes anything in more recent versions of Outlook (like create emails, as one of my programs does) you will run into the problem where Outlook prompts you to allow an external program to make changes, for X minutes. Very annoying. The solution is to use the Outlook Redemption object instead, from <a href="http://www.dimastr.com/redemption">http://www.dimastr.com/redemption.<;/a> It's a free library that duplicates most of the Outlook OLE API, but uses a lower-level API to do the actual work, eliminating that security prompt.

#3
0

Find Articles by Tag

CoderObject Event Handling Expression WinAPI SDK PostgreSQL ODBC driver PowerServer Web Repository PowerBuilder Compiler Application ODBC Android Source Code Visual Studio PFC Stored Procedure Git Design Transaction TLS/SSL UI Modernization Database Object Export JSON SQL WebBrowser TFS OAuth Windows 10 Icons Debugging SnapObjects Trial 64-bit Import CrypterObject Resize Data Class GhostScript Error MessageBox UI Performance PDF Web Service Proxy API Automated Testing Configuration Script Branch & Merge DevOps PowerBuilder (Appeon) PostgreSQL Interface Authentication SVN HTTPClient Excel PBNI SnapDevelop Mobile Encoding InfoMaker Text Outlook 32-bit DLL OrcaScript PBVM Web API Encryption PBDOM Icon Messagging Database CI/CD Model SOAP TreeView C# Database Profile TortoiseGit OAuth 2.0 Source Control JSONGenerator Menu Debug Azure COM License Filter JSONParser Charts Authorization DataWindow JSON External Functions Debugger RESTClient Database Table RichTextEdit Control BLOB IDE Sort DataWindow Export Windows OS Database Connection Array DragDrop Syntax Migration XML SqlExecutor Service Open Source File iOS Database Table Data Bug Oracle ActiveX OLE PDFlib PowerScript (PS) Database Painter SQL Server SqlModelMapper Database Table Schema .NET Assembly Elevate Conference Testing Installation REST PowerBuilder Platform DataType Deployment Linux OS JSON RibbonBar Validation RibbonBar Builder Import JSON NativePDF .NET DataStore Graph Window Variable UI Themes Event Jenkins .NET Std Framework Event Handler PowerServer Mobile