線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1556
推到 Plurk!
推到 Facebook!

Outlook的Automation物件編程方法

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-26 21:53:09 IP:61.64.xxx.xxx 未訂閱
Outlook的Automation物件編程方法 東北大學 張春明 薑紹飛 張春麗 Microsoft Outlook是可編程桌面資訊管理程式。由於Microsoft Outlook本身不包含Visual Basic for Applications,但包括完整的類型庫(type library)和Visual Basic Scripting Edition (VBScript),因此,Outlook物件編程可以採用兩種方法:即VBScript腳本編程方法和Automation自動化編程方法。 VBScript腳本編程方法一般用於設計基於Outlook的本地化解決方案;而Automation(或OLE Automation)自動化編程方法則是用於建立用戶自己的群件或郵件系統。可以使用早期綁定或後期綁定來開始一個Automation過程。本文將以後期綁定爲例介紹在Delphi 5編程環境下,Outlook的Automation物件編程方法。 Outlook物件模型 Outlook基於Microsoft Exchange消息系統,更具體地說是基於MAPI(Messaging Application Programming Interface)來存儲資料。若將Outlook安裝到一台沒有其他任何消息元件的電腦中,則安裝程式會自動安裝基於MAPI的Microsoft Exchange消息系統。 與任何一種消息系統一樣,Microsoft Exchange使用一個層次化的文件夾(Folder)集合來存儲資料。文件夾可以包含子文件夾(如收件箱、發件箱等)和條目(Item)(如郵件消息、約會、聯繫人和任務等)。正是由於這種不確定性,使Outlook編程與以文檔爲中心的其他Office産品編程相比更具挑戰性,是所有Microsoft Office程式中物件編程最複雜的一種。Automation解決方案在很大程度上就是在這種文件夾層次中導航。 在Outlook物件模型中,Application物件包含NameSpace物件;NameSpace物件包含給定資料源(如MAPI消息庫)中所有文件夾,即MAPIFolder物件集合;MAPIFolder物件包含該文件夾中所有條目物件;每個條目物件包含用於對其進行控制的可編程物件。 各物件含義如下: ●Application物件是整個模型的根物件,由CreateOleObject或GetActiveOleObject 函數返回; ●NameSpace物件代表任何可識別資料源,如MAPI消息庫; ●Folders物件集合包括指定消息庫(或任何可識別資料源)及其下級文件夾中所有的MAPIFolder文件夾物件; ●Items物件集合包括指定文件夾中所有Item條目物件; ●Explorer物件用於顯示一個文件夾的視窗; ●Inspector物件用於顯示一個條目的視窗。 Outlook物件編程步驟 1.在Delphi 5中,採用後期綁定來初始化一個Automation過程時,建議引用outlook8.pas單元,該單元包括Outlook類型庫中所用常量定義。 2.建立一個Application類的實例。 3.調用GetNamespace過程指定要使用的名字空間。 若使用後期綁定,則所有物件變數均必須爲Variant類型,如OutlookApplication, OutlookNameSpace等。 OutlookNameSpace:=Outlook.GetNamespace (‘MAPI’); 4.調用Outlook名字空間的Logon 方法登記到郵件系統。該方法的四個參數的含義分別爲Microsoft Exchange Profile檔案名、口令、是否顯示標準登錄對話方塊、是否建立一個新的Microsoft Exchange會話。例如: OutlookNameSpace.Logon(ProfileStr, PasswordStr, False, True); 5.調用Outlook名字空間的GetDefaultFolder方法返回所請求的默認的MapiFolder文件夾物件(即MAPI名字空間內的一個文件夾)。例如,將默認的Contacts文件夾物件賦給OutlookFolder變數的方法如下: OutlookFolder := OutlookNameSpace. GetDefaultFolder(olFolderContacts); 又如,下列語句可以顯示發件箱文件夾名稱: Caption := Variant(OutlookNameSpace. GetDefaultFolder(olFolderOutbox)); 此外,還可以使用文件夾集合Folders(索引)方法查找文件夾。這是查找自定義、非標準文件夾的唯一方法。如: urgentFolder := olMAPI.Folders(“Mailbox - Zhang Chunming”).Folders(“Urgent”); 下面例子顯示收件人ZhangChunming的共用日曆文件夾: OutlookReciepientItem := OutlookNameSpace. CreateRecipient(‘ZhangChunming’); OutlookReciepientItem.Resolve; if OutlookReciepientItem.Resolved <> 0 then begin OutlookFolder := OutlookNameSpace. GetSharedDefaultFolder(OutlookReciepientItem, olFolderCalendar); OutlookFolder.Display; end; 6.用MAPIFolder物件的Items屬性返回該物件包含的條目物件集合。 有三種方法可以返回指定的條目物件: ●可以用Items(名字)方法返回指定的條目物件。如:下面語句返回指定文件夾中題目爲“會議通知”的條目物件: OutlookMailItem:=OutlookFolder.Items(‘會議通知’); ●也可以用Items(索引)方法返回指定的條目物件。返回指定文件夾中第一個條目物件的方法如下: OutlookMailItem := OutlookFolder.Items(1); 下面例子遍曆指定文件夾(MAPIFolder物件)中所有條目物件集合,並顯示條目主題。 for i := 1 to OutlookFolder.Items.Count do begin Caption := Caption +‘-’ + String(OutlookFolder.Items[i]); OutlookFolder.Items[i].Display; end; 注意:若指定文件夾不包括任何條目,則Items物件集合的Count屬性爲0。 ●還可以用Items條目集合的Find方法查找條目。這是在Outlook文件夾中查找那些沒有唯一標識的條目的唯一可行的方法。如: OutlookMailItem := OutlookFolder.Items.Find(‘[Subject] = “會議通知”’); 一旦找到滿足搜索條件的第一個條目,可以用FindNext方法繼續搜索其餘條目。 有兩種方法可以建立新條目物件: ●用Application物件的CreateItem方法創建默認條目物件,如AppointmentItem、ContactItem、JournalItem、MailItem、NoteItem、PostItem或TaskItem等。Outlook自動將新建條目保存到默認文件夾中。下面語句創建一個新郵件: OutlookMailItem := Outlook.CreateItem (olMailItem); 下面語句創建一個新聯繫人: OutlookContactItem := Outlook.CreateItem(olContactItem); ●用Items物件集合的Add方法創建指定類型的條目物件。若未指定條目物件類型,則默認爲父文件夾條目物件類型。若該文件夾從未指定類型,則默認條目物件類型爲MailItem。下面語句將在當前Contacts文件夾中新建一個ContactItem條目。 OutlookContactItem := Outlook.GetNamespace (‘MAPI’).GetDefaultFolder (olFolderContacts) .Items.Add; 也可以如下所示分成幾行語句完成: OutlookNameSpace := Outlook.GetNamespace(‘MAPI’); OutlookFolder := OutlookNameSpace. GetDefaultFolder(olFolderContacts); OutlookContactItem := OutlookFolder.Items.Add(olContactItem); 還可以使用自定義表單向當前Contacts文件夾中加入新聯繫人,如: OutlookFolder := OutlookNameSpace. GetDefaultFolder(olFolderContacts); OutlookContact := OutlookFolder.Items.Add(‘IPM.Contact.MyForm’); 最後,調用Item物件的Save或Send方法保存或發送新建條目。 不論是MAPIFolder物件還是Item物件,均可以調用Display方法顯示對應的視窗。如OutlookContactFolder.Display可以顯示聯繫人文件夾,OutlookTaskItem.Display可以顯示任務條視窗等。 OutlookTaskItem.Display; 編程實例:創建並發送一個新郵件消息 首先調用發件箱文件夾Items條目物件集合的Add方法創建新郵件條目物件(olMailItem類型);其次調用Recipients 物件集合的Add方法來創建一個收件人,調用Attachments物件集合的Add方法來增加一個附件;然後設置郵件消息的Subject(主題)、Body(正文)(事實上所有Outlook物件都有主題和正文屬性)、To(收件人)等屬性;最後調用Send方法發送郵件。 完整的程式清單如下所示: procedure SendMail; var Outlook: variant;{ Application } OutlookNameSpace: variant;{ NameSpace } OutlookFolder: variant;{ MAPIFolder } OutlookMailItem: variant;{ MailItem } OutlookRecipient: variant;{ Recipient } OutlookAttachment: variant;{ Attachment } begin try Outlook:=CreateOleObject(‘Outlook. Application’); except ShowMessage(‘無法啓動Microsoft Outlook!’); Exit; end; try OutlookNameSpace := Outlook.GetNamespace(‘MAPI’); { 創建新郵件消息 } OutlookFolder := OutlookNameSpace.GetDefault Folder(olFolderOutbox); { 增加收件人(若地址薄中已有此人,則僅用其名字即可,否則必須包括完整地址,如OutlookNameSpace.CurrentUser.Address)} OutlookMailItem := OutlookFolder.Items.Add(olMailItem); OutlookRecipient := OutlookMailItem. Recipients. Add(‘ZhangChunming’); OutlookRecipient.Type := olTo; if not OutlookRecipient.Resolve then begin ShowMessage(‘無法解析地址!’); Exit; end; { 插入附件(確保路徑正確) } OutlookAttachment := OutlookMailItem. Attachments.Add(‘c:\readme.txt’); OutlookAttachment.DisplayName := ‘樣本附件’; { 設置郵件主題、郵件正文和重要性 } OutlookMailItem.Subject := ‘郵件主題’; OutlookMailItem.Body := ‘此處爲郵件內容’; OutlookMailItem.Importance := olImportanceHigh; OutlookMailItem.Send; finally OutlookRecipient := Unassigned; OutlookAttachment := Unassigned; OutlookMailItem := Unassigned; OutlookFolder := Unassigned; OutlookNameSpace := Unassigned; Outlook := Unassigned; end; 注意:爲避免程式運行時産生異常,程式做了相應的異常處理,如:調用收件人的Resolve方法以確保收件人的有效性等 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-07-01 7:53:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!