Page 1 of 2
Outlook OLE
Posted: Wed Nov 04, 2009 8:58 am
by Colin Haig
Hi
I can list the email subjects from an outlook inbox but how can I get the attachment details.
I would like to save the link to the attachment in a database eg c:\app\test.pdf or c:\app\test.xls
Cheers
Colin
Re: Outlook OLE
Posted: Wed Nov 04, 2009 10:51 pm
by Colin Haig
Hi All
I have been searching the net for examples of what I am trying to do and
found the following but I dont know how to achieve this in FWH
For Each item In folder.Items 'For each item in the folder
For Each attachment In item.Attachments
'Every item, disregarding it's type, has the attachment collection
'We set the file name for this attachment using the path chosen by
'the user and the filename of the attachment
fileName = saveFolderPath + "\" & attachment.fileName
'We call the "SaveAsFile" method of the attachment object
'and pass "filename" as a parameter to save it to
'the desired location
attachment.SaveAsFile fileName
'We increment the attachment count variable
attachmentCount = attachmentCount + 1
Next attachment
Next item
Any help appreciated
Colin
Re: Outlook OLE
Posted: Thu Nov 05, 2009 8:40 pm
by Jack
Could you show the code that read the inbox of Outlook ??
Thanks
Re: Outlook OLE
Posted: Thu Nov 05, 2009 11:23 pm
by Colin Haig
Jack
function ReadMail(aData)
local oOL,oNameSpace,oInbox,i := 0,cName := '',cEmail := '',nCount := 0,;
nNameSpace := 0,nLineCount := 0
asize(aData,0)
oOL := TOleAuto():New( "Outlook.Application" )
oNameSpace = oOL:Get( "GetNameSpace", "MAPI" )
oInbox = oNameSpace:Get( "GetDefaultFolder", "6" ) // 6 = Inbox-Folder
nCount := oInbox:ITEMS:Count()
for i := 1 to nCount
aadd(aData,oInbox:Items[ i ]:Subject)
nLineCount++
if nLineCount > 15
exit
endif
next
aShow(aData,2,5,25,85,'Test','Header')
return(aData)
//------------------------------------------------------------------------------------------------------//
Colin
Re: Outlook OLE
Posted: Thu Nov 05, 2009 11:36 pm
by Antonio Linares
Colin,
You can use [x]Harbour 'For Each':
Code: Select all
for each item In folder:Items
for each attachment In item:Attachments
...
next
next
Re: Outlook OLE
Posted: Sat Nov 07, 2009 3:26 am
by Colin Haig
Hi Antonio
Thanks for the sample code - I got it working.
Cheers
Colin
Re: Outlook OLE
Posted: Sat Nov 07, 2009 8:42 pm
by driessen
Hoi Colin,
I have been reading this topic with great attention.
Please, can you provide an example how you read the attachments and save them to disk ?
This is an issue in which I am very much interested. I started several topics on this subject and for the very first time, I read a topic which might provide us with a solution.
Thank you very much in advance for your help.
Re: Outlook OLE
Posted: Sun Nov 08, 2009 12:10 pm
by Colin Haig
Hi Michel
I am still having issues with ole - it is crashing after diplaying the date after about 12 messages.
for each oItem In oInbox:Items
for each oAttach In oItem:Attachments
if valtype(oItem:ReceivedTime) == 'D'
MsgInfo(oItem:ReceivedTime)
else
MsgInfo(valtype(oItem:ReceivedTime))
endif
oAttach:SaveAsFile('c:\test\' + oAttach:filename)
next
next
This wil save all the attachments in your inbox - I am trying to get all the emails in
a date range
Hope this helps // must thank Antonio for his help
Colin
Re: Outlook OLE
Posted: Mon Nov 09, 2009 10:51 am
by driessen
Colin,
Thanks a lot for your help. I can read and save the attachments to my e-mails in the inbox now.
I have 2 more questions about Outlook and OLE.
1. Do you have any idea how to save a complete e-mail, attachments included ?
I'd like to be able to save my e-mails in seperate MSG-files.
2. Do you have any experience in synchronizing the Outlook-calendar ? I have a calendar in my application and I'd like to synchronize it with the Outlook-calendar. Any idea ?
Thanks a lot in advance.
Re: Outlook OLE
Posted: Wed Nov 11, 2009 3:06 am
by nageswaragunupudi
>>
2. Do you have any experience in synchronizing the Outlook-calendar ? I have a calendar in my application and I'd like to synchronize it with the Outlook-calendar. Any idea ?
>>
I am using this function to post / modify / delete calendar entries. This code includes Test function
Code: Select all
#include 'fivewin.ch'
#DEFINE olFolderCalendar 9
#DEFINE olFolderContacts 10
#DEFINE olFolderDeletedItems 3
#DEFINE olFolderInBox 6
#DEFINE olFolderJournal 11
#DEFINE olFolderNotes 12
#DEFINE olFolderOutBox 4
#DEFINE olFolderSentMail 5
#DEFINE olFolderTask 13
#DEFINE olBusy 2
#DEFINE olPrivate 2
#DEFINE MAILITEM 0
#DEFINE IMPORTANCELOW 0
#DEFINE IMPORTANCENORMAL 1
#DEFINE IMPORTANCEHIGH 2
#define TEST
#ifdef TEST
function Main()
local cID, lResult
SET CENTURY ON
SET DATE ITALIAN
MsgInfo( 'Start' )
CursorWait()
cID := nil
OutLookAppointment( @cID, Date() + 10 + 10/24, ;
'Subject for testing', ;
'Body for testing', 10, 30, .t. )
msginfo( '|' + cID + '|', 'inserted' )
if ! Empty( cID )
OutLookAppointment( cID, Date() + 5 + 11/24 ) // Modify appointment
msginfo( 'modified' )
OutLookAppointment( cID, .t. ) // display appointment
msginfo( 'displayed' )
if MsgYesNo( 'Delete the appointment?' )
OutLookAppointment( cID, .f. ) // delete appointment
msginfo( 'deleted' )
endif
endif
CursorArrow()
MsgInfo( 'Done' )
return nil
#endif
function OutLookObject()
local cApp := 'OutLook.Application'
local oOutLook
TRY
oOutLook := GetActiveObject( cApp )
CATCH
TRY
oOutLook := CreateObject( cApp )
CATCH
END
END
return oOutLook
function OutLookAppointment( ;
cID, ; // See notes
dDateTime, ; // DateTime var of appointment
cSubject, ;
cBody, ;
nDurationMinutes, ; // Duration in minutes, Default 5 mins
nReminderMinutes, ; // Default no reminder
lBusyStatus ) // Default not busy
/*
* Should have minimum two parameters
* if cID is nil and by ref, and 2nd parameter is date,
* cID is created and returned in the first param
* if cID has valid ID and
* if second paramter is logical
* if .t. item is displayed
* if .f. item is deleted
* if second parameter is not logical
* appointment is modified and saved
*
* Returns success or failure as logical
*/
local oOutLook, oItem, oNameSpace, oFolder, o
local lEdited := .t.
local lSuccess := .f.
if PCount() > 1
TRY
oOutLook := OutLookObject()
// oNameSpace & oFolder need not be used if the appln is runnning
// This code runs whether the app is running or not
oNameSpace := oOutLook:GetNamespace( "MAPI" ) // Alternative oOutLook:Session is identical
oFolder := oNameSpace:GetDefaultFolder( olFolderCalendar ) // Constant value is 9
if cID == nil
if PCount() > 1 .and. dDateTime != nil
// oItem := oOutLook:CreateItem( 1 ) // not used bcuz this does not give EntryID if app is not running
oItem := oFolder:Items:Add()
DEFAULT nDurationMinutes := 5, ;
lBusyStatus := .f.
endif
else
// oItem := oNameSpace:GetItemFromID( cID ) // Fails if the app is not running
// Therefore this second approach, which works even when app is not running
for each o in oFolder:Items
if o:EntryID == cID
oItem := o
exit
endif
next o
endif
if oItem != nil
if ValType( dDateTime ) == 'L'
// Display or Delete
if dDateTime // 2nd parameter is true, Display
oItem:Display()
lSuccess := .t.
else // 2nd Parameter is false, Delete
oItem:Delete()
lSuccess := .t.
endif
else
// Create or Modify
WITH OBJECT oItem
if ValType( dDateTime ) $ 'DT'
:Start := dDateTime; lEdited := .t.
endif
if ValType( cSubject ) == 'C'
:Subject := cSubject; lEdited := .t.
endif
if ValType( cBody ) == 'C'
:Body := cBody; lEdited := .t.
endif
if ValType( nDurationMinutes ) == 'N'
:Duration := nDurationMinutes; lEdited := .t.
endif
if ValType( lBusyStatus ) == 'L'
:BusyStatus := lBusyStatus
endif
if ValType( nReminderMinutes ) == 'N'
:ReminderMinutesBeforeStart := nReminderMinutes
:ReminderSet := .t.
lEdited := .t.
endif
if lEdited
:Save()
if cID == nil
cID := oItem:EntryID
endif
lSuccess := .t. // Created or Modified
elseif cID == nil
// new item created but no valid data
oItem:Delete()
endif
END
endif
endif // if oItem != nil
CATCH
END
endif
return lSuccess
//------------------------------------------------------------------//
Re: Outlook OLE
Posted: Wed Nov 11, 2009 6:58 am
by Otto
Hello Michel,
I have an import button in my Fivewin programs. A click on the button opens a small window and you can drag the email from Outlook to this window.
The email gets converted to msg.
See my post:
drag and drop from outlook pure FIVEWIN solution
http://forums.fivetechsupport.com/viewt ... ook#p72596
Best regards,
Otto
Re: Outlook OLE
Posted: Wed Nov 11, 2009 7:32 am
by nageswaragunupudi
Mr Otto
Excellant !!
Re: Outlook OLE
Posted: Wed Nov 11, 2009 6:47 pm
by driessen
Thank you, Guys, for your fantastic proposals.
I know what to do tomorrow.
Joepie.
Re: Outlook OLE
Posted: Mon Nov 23, 2009 6:59 pm
by driessen
Hello,
I think I will succeed in building a synchronisation between the calendar in my application and the calendar in Outlook.
I also will be able to implement all the e-mails into my application.
All this was thanks to the help I got on this forum. Thank you all very much.
But I still have a question concerning Outlook and OLE.
How can I read the exact time of creation or the time of sending or the time of receiving of any e-mail message.
I tried one of these this code :
Code: Select all
oCalendar:Item:SentOn
oCalendar:Item:CreationTime
oCalendar:Item:ReceivedTime
Unfortunately, these codes only result into date, but I'm not able to read the exact time.
Anyone any idea ?
Thanks a lot in advance.
Re: Outlook OLE
Posted: Tue Nov 24, 2009 2:24 pm
by driessen
Hello,
Because my question is quite urgent, I put a small repitition.
Thanks.