摘要: 分析了三种不同的实现邮件发送方法, 通过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开发程序首先需要装载动态链接库文件,然后是得到程序将会使用到的各个函数的地址常用的函数为: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“" /*outlook对象引用文件*/
#import "c:“program files“Microsoft Office“Office“" “
rename_namespace("WD") /*word对象引用文件*/
#import 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对象指针*
pOL;
pMail;
pInspector; /* 定义outlook对象指针*/
TESTHR(Instance(L"ation")); /*创建outlook对象*/
pMail = pOL-CreateItem(); /*创建邮件对象*/
pMail-Display();
pMail-To = m_SendPerson;
pMail-CC = m_CopyPerson;
pMail-Subject = m_bstrSubject;
pInspector = pMail-GetInspector; /*建立邮件对象的发送人和主题*/
//以下为将现存的word或html文件插入到邮件体里
if(m_lngBodyFileSize0)
{
TESTHR(Instance(L"ation"));
_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();
}
以上简单的介绍了如何实现邮件体的发送,真正的邮件程序,还有许多其它的工作,在这不再详叙了,通过以上方法,可以实现多种格式邮件体的发送,本文给出了部分程序代码。
参考文献:
1 J. Klensin. SMTP Service 1869, 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 1999
4 博嘉科技.Visual c++6.0/Internet Programming Instance.北京希望电子出版社.2001年6月
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。