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

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