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

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