CAN YOU TELL ME........

zhaobaozhu 2000-07-17 08:35:00
怎样在VFP中发EMAIL?
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuch 2000-07-18
  • 打赏
  • 举报
回复
在VFP中使用MAPI控件收发邮件

Windows95包含一个名为Exchange的电子邮件客户程序,它提供了集成收件箱、收发消息等功能,可在LAN、远程邮件、MicrosoftFax和Internet等多种邮件系统中进行工作。Exchange具有许多功能,包括拼写检查和消息优先级等,支持超文本消息、收发传真和Internet电子邮件等。

在VFP开发的应用系统中结合Exchange的邮件服务功能,可使该应用系统的功能更完善,使用更方便,用户工作量更少。例如,如果某库存系统在查询库存后,发现某设备库存不够,就自动向运行采购系统的客户机发一通知,采购系统根据它收到的一系列通知来自动编制采购计划。比较起来,这比“库存查询→打印通知→人工传递通知→人工录入通知→生成采购计划”这一传统工作方式速度快,发生人为差错的机会少,操作人员的使用复杂度小,更重要的是它适应了未来“无纸化办公”这一发展趋势。
本文结合自己在实际开发中的一些经验,介绍了VFP的MAPI控件以及在VFP应用系统中使用这些控件收发邮件的一般方法。
1.MAPI控件概述

通信应用程序接口(MAPI)控件,即MSMAPI32.OCX,允许用户创建一个启用邮件的VisualFoxPro应用程序。MSMAPI32.OCX包含两个OLE控件:MAPI工作期(MAPISession)和MAPI消息(MPIMessage)控件。MAPISession控件的功能是建立一个MAPI工作期。MAPIMessage控件执行一系列消息系统函数来收发邮件。

MAPISession控件用来注册一个新工作期和注销当前工作期。注册时,在显示完注册对话框后,SessionID属性包含了刚注册的MAPISession的句柄。此句柄必须传递给MAPIMessage控件。在结束当前MAPISession工作期之前,
必须注销该工作期。

MAPIMessage控件在MAPISession控件建立消息工作期之后,执行一系列系统函数,实现收发邮件的功能。这些功能包括:访问“信箱”中的当前消息,构成一条新消息,发送消息,保存、复制和删除消息,执行应答、全部应答和转寄消息,添加和删除消息的收件人和附件等。
2.MAPI控件的主要属性和方法

要使MAPI控件能够完成收发邮件的功能,程序运行时控件的一些属性必须赋予正确的值并调用控件相应的方法。MAPI控件的属性和方法很多,不可能一一罗列。这里仅仅挑一些对编程至关重要的属性和方法加以说明。
LogonUI属性(MAPISession控件)
指定是否显示注册对话框。当其值为“真”(默认值)时,则出现一个对话框,提示新用户输入他们的用户名和口令;当其值为“假”时,则不显示对话框。
SignOn方法(MAPISession控件)

将用户注册到UserName和Password属性所指定的帐户中,并向底层消息子系统提供一个工作期句柄,该句柄存储在属性SessionID中。注册成功后,必须将该句柄传递给MAPIMessage控件。
SignOff方法(MAPISession控件)
终止当前消息工作期,并从UserName和Password属性指定的帐户中注销用户。
Action属性(MAPIMessage控件)
该属性确定激活MAPI工作期控件时执行什么动作。
FetchSorted属性(MAPIMessage控件)

在用收件箱中的消息填充消息集合时,指定或返回消息的排序。当其值为“真”时,按接收消息的顺序向消息集合添加消息(先进先出)。当其值为“假”(默认值)时,由用户收件箱中的排序添加消息。
FetchUnreadOnly属性(MAPIMessage控件)

该属性决定是否将消息集合中的消息限定为未读消息。当其值为“真”时,只向集合添加FetchMsgType属性指定的未读消息。当其值为“假”(默认值)时,添加收件箱中适当类型的全部消息。
MsgIndex属性(MAPIMessage控件)

指定当前索引消息的索引编号。由它标识的消息称为当前索引消息。在索引改变时,所有消息的其他属性随之改变,以反映索引消息的特征。值-1表示在构成缓冲区内生成一条新消息。
MsgCount属性(MAPIMessage控件)
包含当前通信工作期消息集合中现有的消息总数。
RecipDisplayName、MsgSubject、MsgNoteText属性(MAPIMessage控件)
这几个属性分别指定或返回当前索引消息的收件人姓名、主题行、文本体,从而构成一条完整的消息。
Send方法(MAPIMessage控件)

调用该方法即发送一条消息。Send方法带有一个参数nDialog,当nDialog为“真”时,显示Exchange邮件界面,由用户输入消息的各个组件,并将消息提交给邮件服务器以供传送。当nDialog为“假”时,在不显示相应界面的情况下,将输出消息提交给邮件服务器。
3.在VFP中使用MAPI控件收发邮件

在一个MAPI工作期内,系统有两个可供用户操作的缓冲区:构成缓冲区和读缓冲区。在构成缓冲区(ComposeBuffer)中用户可创建和编辑消息。当MsgIndex属性设置为-1时,构成缓冲区成为当前的工作缓冲区。许多对消息的操作,包括发送消息、保存消息或删除消息收件人和附件等操作,都只能在构成缓冲区成为当前的工作缓冲区时才可实现。读缓冲区(ReadBuffer)由检索过的取自用户信箱的消息集合构成。只有当Action属性为1时,读缓冲区才是当前的工作缓冲区,其中的内容才可被存取。此时可用MsgIndex属性来访问集合中的一个个消息。从代表第一条消息的0值开始,直至最后一条消息MsgIndex-1。

在清楚了构成缓冲区和读缓冲区的意义后,在VFP应用系统中使用MAPI控件来收发消息就变得相当容易。要发送一条消息,先给MsgIndex属性赋值-1,切换到构成缓冲区。根据需要,我们可控制是否出现Exchange邮件界面。若需要出现该界面,调用Send(.T.)方法,以后的一切工作都是用户自己的事情。若不想让界面出现,用程序给MsgSubject、RecipDisplayName、MsgNoteText属性赋予确定的值后,调用Send(.F.)方法将消息内容提交给邮件服务器以供传送。在读新收到的消息时,首先给FetchSorted、FetchUnreadOnly属性赋值.T.,Action赋值1以切换到读缓冲区,接着用MsgIndex属性就可访问到每条新收到的消息。下面的两段代码是收发邮件的例子,其中OleMSess和OleMMess分别是MAPISession和MAPIMessage控件的名字。
&&发送一条消息
thisform.OleMSess.SignOn&&注册工作期
thisform.OleMMess.SessionIDΚthisform.OleMSes.SessionID&&传递SessionID
thisform.OleMMess.MsgIndexΚ-1&&切换到构成缓冲区
thisform.OleMMess.RecipDisplayNameΚ″1c1″&&收件人、主题、正文
thisform.OleMMess.MsgSubjectΚ″工作传票″
thisform.OleMMess.MsgNoteTextΚ″请购进一批电能表。″
thisform.OleMMess.Send(.F.)&&发送
thisform.OleMSess.SignOff&&注销工作期
&&读取未读过的消息
thisform.OleMSess.SignOn
thisform.OleMMess.SessionIDΚthisform.OleMSess.SessionID
thisform.OleMMess.FetchSortedΚ.T.
thisform.OleMMess.FetchUnreadOnlyΚ.T.&&只取未读的消息
tthisform.OleMMess.ActionΚ1&&切换到读缓冲区
tempΚ″″
jΚthisform.OleMMess.MsgCount&&新消息的数目
ForiΚ0Toj-1
thisform.OleMMess.MsgIndexΚi&&依次取消息
tempΚtemp+thisform.OleMMess.MsgNoteText+Chr(13)+Chr(10)
EndFor
thisform.OleMSess.SignOff
zhaobaozhu 2000-07-17
  • 打赏
  • 举报
回复
初此之外还有其他方法吗?
Hank 2000-07-17
  • 打赏
  • 举报
回复
通过OLE调用OutLook即可!

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧