基於vc與word、outlook對象模型的email實現

論文類別:計算機論文 > 計算機應用論文
論文作者: 佚名
上傳時間:2005/12/23 11:39:00

摘要: 分析了三種不同的實現郵件發送方法, 通過vc可視化開发環境,結合word及outlook對象模型,實現將word格式以及其他文件格式的文件作為email的郵件體,從而利用word的強大编輯能力構成與發送豐富多彩的郵件。

關鍵词:SMTP協議 MAPI編程接口  對象模型  動態鏈接庫 電子郵件

隨著信息技術的飞速發展,電子郵件作為一種通訊手段,在日常生活和辦公領域中發揮著巨大的作用,一些行業需要以郵件為載体,實現信息的實交互、反馈、統計等功能。Visual c++作為功能強大的可視化編程工具正在日益得到廣泛的應用。使用vc开發可以實現多線程,支持面向對象、模塊化、等特點,大大提高軟件的開發效率,同時結合 word、excel、outlook等office 對象模型,從而有望實現含多格式郵件体的郵件定時、批量的發送及其信息反饋的自動處理。本文提出了一種利用vc實現邮件發送的方法,並且實现了將word、html文檔插入到郵件體,从而達到即有web網頁的生动,又具有郵件的快捷、方便的效果。
1.   基於vc的email功能實現
在vc環境下有三種方法可以實現郵件的發送,下面分別介紹:
(1):使用SMTP進行設计。電子郵件系統所應用的傳輸協议包括SMTP和POP協議。SMTP即簡單郵件传輸協議,屬於TCP/IP協議族,.使用SMTP設計基於以下通訊模型:針对用戶的郵件請求,發送SMTP與接受SMTP之間建立一個雙向通道。一旦传送通道建立,SMTP发送者發送mail命令指明郵件發送者。如果SMTP接受者接受,則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接受到。故在vc環境下,基于SMTP協議的郵件發送流程為:

SMTP协議也有自身的局限性,它只能传輸ASCAII文本文件,但对於一些二進制數據文件需要進行編碼後才能傳输。
(2)使用MAPI進行設計。MAPI是一系列的編程接口規範,而不是应用程序、動態鏈接庫或系統服务程序。它們可以將任何用於电子郵件或工作組的应用程序與適應MAPI的消息服務天衣无縫地連接在一起。在這个規範中詳細說明了用戶的應用程序和服務提供應用程序是如何通過API實現交互的。MAPI體系包括以下幾部分:①MAPI的用戶应用程序接口。包括簡單的MAPI、CMC9(通用信報調用)、擴展MAPI和Active/OLE報文接口。②MAPI支持的客戶應用程序的類型。包括報文感知應用程序、報文激活應用程序和基于報文的應用程序。③MAPI的服務供應程序。包括地址提供者、報文提供者、傳輸提供者。使用vc開發程序首先需要裝载動態鏈接庫文件MAPI32.DLL,然後是得到程序將會使用到的各個函數的地址常用的函數為:MAPILogon(建立会話函數)、MAPILogoff(結束會話函數)、MAPIFreeBuffer(釋放緩沖內存函數)、MAPISendMail(信報發送函數)。通過调用以上函數即可實現郵件的發送。
由於MFC對MAPI進行了很好的封裝,使開發信報應用程序的工作大大簡化,同時MAPI提供了大量的函數和接口,可以提供豐富的信報功能,然而卻很難在郵件體裏插入多種格式的文件,只能包含在附件裏,對於某些基於郵件的市場活動等,很難吸引郵件接受者的註意,故而達不到滿意的效果。
(3)使用outlook對象模型進行設計。使用outlook對象模型可以在vc開發環境下實現outlook所有的信報功能,结合vc語言的多線程、模块化設計與outlook的強大的信報處理功能,從而可以實現郵件的自動、定時发送,並可以實現多格式邮件體,在實現過程中相對以上兩種方法更加簡單易行,本文重點介紹如何利用outlook來實現。
2.   Outlook、word對象模型的簡單介紹
Microsoft office 通過一個對象的等級系統和被称為對象模型的對象集合,將其功能提供給VBA語言,一個程序包含兩個基本要素:內容和功能。內容指的是程序所包含的信息,也就是文檔等信息;功能指的應用程序內容的所有方式,例如打開、關閉、刪除等。組成程序的內容和功能以離散的單元提交給VBA,稱為對象。大部分情況下,程序提供給VBA的對象集同所有工作需要的對象對應。程序提供的對象根据相關性以等級關系組织起來。最高級對象為Application,在其底下又有许多的子對象,如Excel中的Workbook對象,word中的Document對象,通過使用對象的屬性和方法,可以使用office提供的所有功能。
以下簡單介紹在本文使用的對象。
(1)   outlook對象模型:
application對象。该對象是outlook的核心对象,即根對象,它提供了對其它所有對象的訪問。
Namespace对象。該對象是outlook数據源的一個抽象根,雖然該對象不被使用,它還是提供了對在對象樹底層上排在自己下面的對象的訪問。
Item對象。Outlook中最基本的信息單元。本文將使用mailitem對象。
Explorer對象。文件夾中项目的可視化表示,outlook用explorer顯示item對象。
Impector對象。用来顯示項目的outlook窗體。Inspector之於項目,如同explorer之於文件夹。
(2)   word對象模型
application對象。 Word的根對象。
Document對象。該對象為word中的文檔對象,相對於word中的某一具體文檔。
Range對象  document對象的某一特定區塊,可以通過不同的參數指定,比如一個段落、一個表格等。
3. 使用outlook對象模型進行設計
使用outlook對象模型,需要在程序中包含对office對象的引用,獲得命名空間,然後調用對象的属性和方法,以下列出了部分程序代碼。
(1)在stdafx.h 文件,加入以下語句:

#import "c:\program files\Microsoft Office\Office\msoutl9.olb" /*outlook對象引用文件*/
#import "c:\program files\Microsoft Office\Office\msword9.OLB" \
rename_namespace("WD") /*word對象引用文件*/
#import <mshtml.tlb> rename_namespace("HTML") /*加入对html對象的引用*/
(2)   郵件發送函數
       BOOL CProject::SendMail()
{
     WD::_ApplicationPtr pWD;
   WD::_DocumentPtr pWordDoc;
   WD::RangePtr pMainStory;
   WD::_DocumentPtr pWordEditor;
   HTML::IHTMLDocument2Ptr pHtmlEditor;  /* 定義word对象和html對象指針*
   Outlook::_ApplicationPtr pOL;
     Outlook::_MailItemPtr pMail;
     Outlook::_InspectorPtr pInspector;   /* 定義outlook對象指針*/
     TESTHR(pOL.CreateInstance(L"Outlook.Application")); /*创建outlook對象*/
     pMail = pOL->CreateItem(Outlook::olMailItem);   /*創建郵件對象*/
     pMail->Display();
     pMail->To = m_SendPerson;
     pMail->CC = m_CopyPerson;
     pMail->Subject = m_bstrSubject;
     pInspector = pMail->GetInspector;     /*建立郵件對象的發送人和主題*/  
     //以下為將現存的word或html文件插入到郵件體裏
     if(m_lngBodyFileSize>0)
     {
         TESTHR(pWD.CreateInstance(L"Word.Application"));
         _variant_t varBodyFileName=(pApp->m_BodyFilePathName).AllocSysString();
         pWordDoc = (pWD->Documents)->Open(&varBodyFileName);  /*變量m_BodyFilePathName為所需插入郵件體的word或者html文件所在的路徑*/
         pMainStory = pWordDoc->Content;
         pMainStory->Copy();
         pWordDoc->Close();
         pWD->Quit();
         pWordDoc = NULL;
         pWD = NULL;

         if((BOOL)(pInspector->IsWordMail()))       /*檢查是word格式還是html格式*/
         {
           pWordEditor = pInspector->WordEditor;
           (pWordEditor->Content)->Paste();
         }else
         {
           pHtmlEditor = pInspector->HTMLEditor;
           pHtmlEditor->execCommand("Paste",VARIANT_FALSE);
         }
     pMail->Send();
}
以上简單的介紹了如何實現郵件體的發送,真正的郵件程序,還有許多其它的工作,在這不再詳敘了,通過以上方法,可以實現多種格式郵件體的發送,本文給出了部分程序代碼。

免費論文下載中心 http://www.hi138.com


參考文獻

      
1 J. Klensin. SMTP Service Extensions.RFC1869, November 1995
2 G. Vaudreuil. SMTP Service Extensions for Transmission of Large and Binary MIME Messages. RFC1830. August 199
3 microsoft. Microsoft Powerpoint 2000,Outlook 2000和FrontPage 2000 language reference.August 1999
4 博嘉科技.Visual c++6.0/Internet Programming Instance.北京希望電子出版社.2001年6月

免費論文下載中心 http://www.hi138.com
下载论文

論文《基於vc與word、outlook對象模型的email實現》其它版本

計算機應用論文服務

網站聲明 | 聯系我們 | 網站地圖 | 論文下載地址 | 代寫論文 | 作者搜索 | 英文版 | 手機版 CopyRight@2008 - 2017 免費論文下載中心 京ICP备17062730号