Tivoli 服务台 6.0 开发工具包脚本程序设计指南
电子邮件(e-mail)是增长最快的应用软件领域之一。Internet 和组织内部网都依赖电子邮件作为通信代理。
电子邮件允许下列几种通信方式:
由电子邮件网络提供的优势之一是存储与转发机制。
存储并转发机制允许一个用户把消息传送给第二个用户,即使第二个用户没有登录上网。
服务器把第一个用户的消息存储起来,并在第二个用户检查邮箱时传送给他或她。这样就要允许两个用户之间能够异步通信。异步通信意味着通信操作与时间无关。
大多数的电子邮件供应商公布其 API(应用程序设计接口)的方式为:允许其他供应商的应用程序与他们的消息基础结构接口。API 是一系列例行程序,应用程序使用这些例行程序来在操作系统中请求并实施较低级别的服务。
使用 API 允许软件供应商支持特殊化的操作。这意味着使用这些 API 的应用程序必须在专门系统中运行,以利用这种发送消息功能。
注: Internet 邮递协议(SMTP/POP)不是 API。
与供应商的特定发送消息的 API 不同,VIM(供应商独立消息发送)协议不依赖于供应商的特定格式。使用 VIM 协议,开发人员可以编写的可在任意平台上运行,并支持应用程序内置的消息发送特性。
VIM 接口协议是用 VIM Consortium 设计的,包括下列组成部分:
TSD 脚本语言支持的另一个流行的电子邮件协议是 MAPI(邮件应用程序接口),是 Microsoft 的产品。MAPI 表现出与 VIM 相似的功能,并允许使用与 VIM 相同的邮件通信方法。
TSD 脚本邮件接口与 VIM 和 MAPI 都能进行通信。
注:MAPI 不支持下列语句 :
简单邮件传输协议(SMTP)为电子邮件提供如下传送机制:
邮局协议-版本 3(POP3)允许工作站动态访问服务器主机上的邮件投送点。通常,这意味着 POP3 服务器允许工作站在保留有电子邮件的服务器上检索邮件。
注:SMTP 和 POP3 不支持下列语句。
TSD 脚本邮件接口给程序员提供了一种开发启用邮件的应用程序的手段。目前,接口支持三种协议:
TSD 脚本邮件接口允许灵活地建立应用程序,概括如下:
使用 TSD 脚本邮件接口,您可以建立 TSD 脚本程序来实现下列功能:
本小节介绍了一些用来描述 TSD 脚本邮件接口如何实现的术语。
通讯录是用户信息、地址、邮寄表等等所存储的位置。典型地,由邮件管理员管理通讯录。
有两种类型的通讯录:公共和私人。
TSD 脚本邮件接口支持仅按 VIM 协议来读取公用通讯录的能力。
实体是发送或接受电子邮件消息的一个人或程序。
附件文件是可以附到消息上的文件。附上的文件可以是任意格式。正确解释这些文件是发送者和接收者的责任。
收件箱是一个特殊文件,用来支持按照 POP3 协议阅读消息和对消息做标记。它把从 POP3 服务器检索出来的消息存储起来,并提供一种机制,将消息标记为已读或未读。
MsgCntnr 作为参数指针,指向 SMTP/POP3 的收件箱。
邮件管理员是负责监视邮件服务器的人。此人负责管理用户帐户并管理储存在网络中的信息容量。
信箱是分配给个别实体的物理地址。信箱把分发的消息储存起来。信箱也可以说成是一种消息容器。
消息是可以在消息发送系统中传送并保存在消息容器中的任何对象。
消息客户机是一种接口,允许最终用户做以下操作:
消息容器是接收的消息的储存位置。与信箱是同义词。
消息标题是包含如下信息的标题:
消息项是项目列表。一条消息项可以有两种类型:
消息类型定义了消息内容的格式和语意。
备注部分是消息的实际组成部分,VIM 协议支持数种类型。
TSD 脚本邮件接口仅仅支持文本备注部分。
服务器是消息发送系统的一部分,处理如下任务:
服务器也叫"后端"。
用户地址是消息接收者的信箱地址。每个消息系统都有自己的地址格式。
消息寻址是开发消息应用程序中最复杂的问题之一。TSD 脚本邮件接口开发出来以与所有的遵从 VIM、MAPI 和 SMTP/POP 的消息系统接口。但是,要记住,在开发消息应用程序或增强程序时,您必须考虑使用的基础消息系统的要求。
用户标识是分配给实体的唯一标识符。它允许实体登录到邮件服务器上。
下面的片段是从 TSD 脚本中的 mail.kb 文件中摘出的片段。要获得其他信息,参见本章末尾的 "Mail.kb 文件"。
TSD 脚本邮件接口定义了下列类型。根据您的邮件系统的实现情况不同,一些类型是任选项。Internet 邮件协议仅支持 EntityName 和 Address 两种类型。SMTP/POP 要求指定 Address;EntityName 是任选项。
MAILContainer is INTEGER; MAILSession is INTEGER; MAILRef is REAL; MAILName is RECORD; EntityType : INTEGER; NameType : INTEGER; AddressBookName : STRING; EntityName : STRING; AddressType : INTEGER; Address : STRING; CharSet: : STRING; END;
在前面例子中使用的类型的说明列在下面。
下面的记录用来定义一个消息项。
MAILItem is RECORD Class : INTEGER; Type : STRING; Name : STRING; BufferType : INTEGER; BufferData : STRING; END;
在前面例子中使用的类型的说明列在下面。
在没有发送者和接收者的私人协议的时候,建议优先使用 ISO-8859-* 系列中的成员。
这一记录包含了要发送的消息的标题信息。
在 MAPI 中,仅仅 Suject类型起作用,这意味着不支持其它类型。
Internet 邮件协议仅支持 Subject 和 InReplyTo 类型。
Status: MAILSendHeader is RECORD Subject : STRING; Priority : INTEGER; DeliveryReport : BOOLEAN; NonDeliveryReport : BOOLEAN; NonDeliveryContents : BOOLEAN; Encrypt : BOOLEAN; Sign : BOOLEAN; ExpirationDate : DATE ConversationID : LIST of STRING; Sensitivity : INTEGER; InReplyTo : STRING; RespondBy : DATE; KeyWord : LIST of STRING; ReturnReceipt : BOOLEAN; Save : BOOLEAN; CharSet: : STRING; END;
在前面例子中使用的类型的说明列在下面。
注:缺省设置是 NORMAL。
在没有发送者和接收者的私人协议的时候,建议优先使用 ISO-8859-* 系列中的成员。
这一记录在发送消息时设置标题属性。多值的标题属性用列表来声明。
在 MAPI 中,仅仅支持下列类型:
Internet 邮件协议支持下列类型:
下面是消息标题属性的实例:
MAILReadHeader is RECORD Type : STRING; FromName : STRING; FromAddress : STRING; Subject : STRING; MessageDate : DATE; Priority : INTEGER; Sign : BOOLEAN; NestingDepth : INTEGER; UniqueMsgID : STRING; Sensitivity : INTEGER; InReplyTo : STRING; RespondBy : DATE; ReturnReceipt : BOOLEAN; ConversationID : LIST of STRING; KeyWords : LIST of STRING; AddressType : INTEGER; FromCharSet : STRING; SubjectCharSet : STRING; END;
在前面例子中使用的类型的说明列在下面。
其他用户定义的值也是可以接受的。
在没有发送者和接收者的私人协议的时候,建议优先使用 ISO-8859-* 系列中的成员。
在消息容器里搜索消息时,这一记录获取消息属性的摘要。
MAPI 仅支持 MsgReference 类型。
Internet 邮件协议支持除了 Priority 之外的所有类型。
下面是消息属性摘要的例子。
MAILMsgSummary is RECORD MsgReference : MAILRef; Type : STRING; UnreadMail : BOOLEAN; FromName : STRING; FromAddress : STRING; Priority : INTEGER; Subject : STRING; MessageDate : DATE; FromCharSet : STRING; SubjectCharSet : STRING; END;
在前面例子中使用的类型的说明列在下面。
在没有发送者和接收者的私人协议的时候,建议优先使用 ISO-8859-* 系列中的成员。
这一记录用于过滤在扫描消息进程中检索出的消息类型。
MAPI 和 SMTP/POP 都不支持过滤。
下面是过滤器属性的例子。
MAILFilter is RECORD MessageType : STRING; UniqueMsgID : STRING; Sent : BOOLEAN; Keyword : STRING; From : STRING; Subject : STRING; Date : DATE; Priority : INTEGER; Sign : BOOLEAN; ConversationID : STRING; Sensitivity : INTEGER; RespondBy : DATE; END;
在前面例子中使用的类型的说明列在下面。
其他用户定义的值也是可以接受的。
MAILInfoRec 记录结构用在 MAILQueryDefaults 函数中,用于接收缺省的邮件系统值。
下例演示了 MailInfoRec 结构如何工作。
MAILInfoRec is RECORD Product: STRING; SpecVersion: INTEGER; MaxSubjectLen: INTEGER; MaxTextLen: INTEGER; PathNameReq: BOOLEAN; UserNameReq: BOOLEAN; PasswdReq: BOOLEAN; DefPathName: STRING; DefUserName: STRING; DefCharSet: STRING; END;
在前面例子中使用的类型的说明列在下面。
TSD 脚本允许您在通讯录中列出消息接收人的姓名。( MAPI 或 SMTP/POP 都不支持通讯录。) 此外,TSD 脚本不支持嵌套通讯录。
下面的记录用来检索通讯录中的项。
MAILABEntry is RECORD Name : STRING; AddressType : INTEGER; Address : STRING; Comments : STRING; EntryType : INTEGER; END;
注:最终用户不能修改通讯录。
在前面例子中使用的类型的说明列在下面。
本小节指导您实现一个小的 TSD 脚本程序样本进。这个程序把邮件消息从标识为 "BILL" 的用户向标识为 "JOHN." 的用户发送。
TSD 脚本程序可以通过把 TSD 脚本邮件模块添加到知识库中的 uses 段来使用 TSD 脚本邮件接口。
TSD 脚本邮件模块在 mail.kb 文件中,并在开发工具包安装目录下自动安装。mail.kb 文件包含了 TSD 脚本邮件函数使用的记录结构、常量和返回码的定义。
下列代码段演示了向程序中添加 TSD 脚本邮件接口的第一步:
Knowledgebase SENDMAIL; USES mail; PUBLIC PROCEDURE SendMailMessage; PRIVATE ROUTINES PROCEDURE SendMailMessage IS ACTIONS (*Body of procedure *) END;
在调用任何 TSD 脚本邮件函数之前,应用程序必须首先调用 MAILInitialize 语句。这一函数初始化TSD 脚本邮件接口所用的资源和数据结构。
MAILInitialize 语句必须指定将要使用的协议作为其参数:
初始化 TSD 脚本邮件接口之后,您就可以打开其中的任意数目的邮件会话了。
MAILInitialize(OMI_VIM_INTERFACE)
注:在成功调用 MailInitialize 后,切记在退出程序之前始终要调用 MailTerminate。
初始化 TSD 脚本邮件接口之后,您就可以使用 MAILOpenSession 语句打开会话了。MAILOpenSession 要求:
下面的实例代码:
注:在 OS/2 中,使用 OMISEL_CP850。在 Windows 中, 使用 OMISEL_CP1252。
您也可以传递 $Unknown, 系统使用缺省字符集。
注: Microsoft Windows 95/98 的用户:请参阅 TSD 脚本语言参考中的 MailOpenSession 语句中的备注部分。
对于任何失败状态,用 MailGetLastErrorType 语句。
PROCEDURE SendMailMessage VARIABLES sessID: MailSession; rc:Integer; ACTIONS rc := MAILInitialize(OMI_VIM_INTERFACE); IF (rc <> KML_SUCCESS) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); Exit; END;
rc := MAILOpenSession('M:\APPS\CCMAIL\CCDATA', 'BILL','K2K2', OMISEL_CP850, sessID,OMI_VIM_INTERFACE); IF (rc <> KML_SUCCESS) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); MailTerminate(OMI_VIM_INTERFACE); Exit; END;
(* Send the message *)
rc := MAILCloseSession(sessID); IF (rc <> KML_SUCCESS) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); MailTerminate(OMI_VIM_INTERFACE); Exit; END;
rc := MAILTerminate(OMI_VIM_INTERFACE);
END;
现在,打开了一个有效的会话。然而,在发送消息之前,必须完成几项任务:
在下面的例子中,仅仅 MAILSendHeader记录结构中的 Sub ject 和 Priority 字段被初始化了。所有其它的字段都保留为 $Unknown。
msgHeader:MAILSendHeader; msgHeader.Subject := 'Floor Plan'; msgHeader.Priority := OMI_HIGH_PRIORITY;
假设您想给一个叫做 John 的接收者发送消息。接收者列表仅有一个组成部分,地址 "JOHN"。
如例子中所演示的,toList 是 MAILName 记录的列表。
toList: LIST of MAILName; toRecipient:MAILName;
有两种方法可以指定接收者:地址或姓名。
MailName 记录有一种叫做 EntityType 的类型,它指接收者的类型。如果接收者是单一用户或程序,EntityType 必须被赋值 OMISEL_ENTITY。如果接收消息的是一个组(例如邮寄列表),则 EntityType 必须被赋值为 OMISEL_GROUP。
如果按姓名来指定接收者,必须在 MAILName 记录中初始化下列类型:
NameType 类型中的条目取决于发送消息的应用程序名。例如:
如果按地址来指定接收者,必须初始化 MAILName 记录中的 AddressType 和 Address 字段。
AddressType 字段指地址类型。例如:
OMISEL_CCMAIL、OMISEL_NOTES、OMISEL_MHS 等等。您可在本章后的类型说明中找到 AddressType 的完整列表。
Address 类型包含了 AddressType 类型所规定的格式的地址字符串。请参阅您的 VIM e-mail 供应商所提供的文档来确定正确的地址格式。
SMTP/POP 要求按地址来指定接收者。name 字段是任选项。
注:当 MAILReadMessage 读取消息时,语句在检索消息的同时完成 MAILName 记录的 Name 和 Address 的类型说明。
当被用作 SMTP/POP3 支持时,msgCntnr 语句指向收件箱。象此代码片段所演示的那样,您按照姓名来指定接收者,并使用缺省通讯录:
toRecipient.EntityType := OMISEL_ENTITY; toRecipient.AddressBookName := ''; toRecipient.EntityName := 'JOHN'; ListInsert(toList, toRecipient, $After);
注:语句 toList 和 ccList 可用同种方法来声明。
下面的任务将建立消息项列表。必须指定下列项:
本例程序包含消息项列表:
(* Build the message items list *) (* First item is a note part *) Item.Class := OMISEL_NOTE_PART; Item.Type := OMI_TEXT; Item.Name := 'Title for the note part'; Item.BufferType := OMI_ACTUAL_DATA; Item.BufferData := 'Hi John. I have' & 'enclosed the floor' & 'plan layout in the' & 'file attachment. '; Name.Address := 'JOHN/ACME CORPORATION' ListInsert(Items, Item, $After);
(* Second item is a file attachment *) Item.Class := OMISEL_ATTACH; Item.Name := 'image.pcx'; Item.BufferType := OMI_FILE_DATA; Item.BufferData := 'D:\TMP\PAPANIM.PCX'; ListInsert(Items, Item, $After);
注:演示 Name.Address 的 SMTP/POP 例子类似于:
Name.Address := 'john@acme.com'
SendMailMessage 过程可象编写如下。
PROCEDURE SendMailMessage IS VARIABLES header: MAILSendHeader; Items: LIST of MAILItem; Item: MAILItem; name: MAILName; toList: LIST of MAILName; rc :INTEGER; sessID: MailSession;
ACTIONS rc := MAILInitialize(OMI_VIM_INTERFACE); IF (rc < 1) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); Exit; END;
rc := MAILOpenSession('M:\APPS\CCMAIL\CCDATA', 'BILL','K2K2', OMISEL_CP850, sessID, OMI_VIM_INTERFACE);
IF (rc < 1) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); MailTerminate(OMI_VIM_INTERFACE); Exit;
END;
(* Send the message *)
(* Set the header record *)
header.subject := 'Floor Plan'; header.Priority := OMI_HIGH_PRIORITY;
(* Build the message items list *) (* First item is a note part *)
Item.Class := OMISEL_NOTE_PART; Item.Type := OMI_TEXT; Item.Name := 'Title for the note part'; Item.BufferType := OMI_ACTUAL_DATA; Item.BufferData := 'Hi John. I have enclosed'& 'the floor plan layout in'& 'the file attachment. '; ListInsert(Items, Item, $After);
(* Second item is a file attachment *)
Item.Class := OMISEL_ATTACH; Item.Name := 'image.pcx'; Item.BufferType := OMI_FILE_DATA; Item.BufferData := 'D:\TMP\PAPANIM.PCX'; ListInsert(Items, Item, $After);
(* Specify the recipient *) name.EntityType := OMISEL_ENTITY; name.AddressBookName := ''; name.EntityName := 'JOHN' ListInsert(toList, name, $After);
rc := MailSendMessage(SESSID, OMI_MAIL, header, toList, $UNKNOWN,$UNKNOWN, Items); IF (rc < 1) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & rc <); ELSE ('Mail sent successfully'); END;
rc := MAILCloseSession(sessID); IF (rc < 1) THEN WinMessageBox($desktop, 'error', $MBOK, 'Error in MAILInit. Error code is ' & r <); MailTerminate(OMI_VIM_INTERFACE); Exit; END;
rc := MAILTerminate(OMI_VIM_INTERFACE); END;
TSD 脚本邮件接口可以读取邮件容器中的消息。读取消息是一个两步骤的过程:
注: SMTP/POP3 不支持过滤器。
下面是接收邮件的程序例子:
KNOWLEDGEBASE mailrecv; USES mail; ROUTINES PROCEDURE ReadMail; PRIVATE ROUTINES PROCEDURE ReadMail IS VARIABLES sess :MAILSession; msgContainer :MAILContainer; toList :LIST OF MAILName; outfile :FILE; numMessages :INTEGER; msgSummary :LIST OF MAILMsgSummary; summRec :MAILMsgSummary; msgRef :MAILRef; msgHeader :MAILReadHeader; msgItems :LIST of MAILItem; ccList, bccList :LIST of MAILName; nestedMsg :BOOLEAN; reply :string; rc :INTEGER;
ACTIONS rc:=MAILInitialize(OMI_SMTP_POP_INTERFACE); IF rc < 1 THEN EXIT; END; rc:=MAILOpenSession('mozart.softart.com', 'Mr Totstuser@domain name', 'pass',$UNKNOWN, sess,OMI_SMTP_POP_INTERFACE); IF rc < 1 THEN WinMessageBox($Desktop,'Error',$MBIconError, 'Open session failed: '&rc); MAILTerminate(OMI_SMTP_POP_INTERFACE); EXIT; END; rc:=MAILOpenMessageContainer (sess, 'c:\mail\inbox.idx', msgContainer); IF rc < 1 THEN WinMessageBox($Desktop,'Error',$MBIconError, 'Open container failed: '&rc); MAILCloseSession(sess); MAILTerminate(OMI_SMTP_POP_INTERFACE); EXIT; END; rc:= MAILScanMessages(msgContainer, OMI_UNREADONLY, $Unknown, TRUE, numMessages, msgSummary); IF rc < 1 THEN WinMessageBox($Desktop,'Error',$MBOK, 'Scan failed: '&rc); MAILCloseMessageContainer(msgContainer); MAILCloseSession(sess); MAILTerminate(OMI_SMTP_POP_INTERFACE); EXIT; END; REPEAT IF numMessages > 0 THEN rc:=FOpen(outfile, 'mailtest.log', $CREATE); IF rc < 1 THEN WinMessageBox($Desktop,'Error',$MBIconError, 'File Open failed: '&rc); EXITLoop; ELSE FWriteLn(outfile, 'Number Read: ' & numMessages); FOR msgSummary DO summRec := msgSummary[$Current]; FWriteLn(outfile, 'Message Type: ' & summRec.Type); FWriteLn(outfile, 'Unread Mail: ' & summRec.UnreadMail); FWriteLn(outfile, 'FromName: ' & summRec.FromName); FWriteLn(outfile, 'FromAddress ' & summRec.FromAddress); FWriteLn(outfile, 'Priority: ' & summRec.Priority); FWriteLn(outfile, 'Subject: ' & summRec.Subject); msgRef := summRec.MSGReference; rc := MAILReadMessage(msgContainer,msgRef, 0,msgHeader, msgItems,toList, ccList,bccList, nestedMsg); IF rc < 1 THEN WinMessageBox($Desktop,'Error', $MBIconError, 'ReadMessage failed: '&rc); FClose(outfile); EXITLoop;
ELSE MAILReleaseMessageReference (msgContainer, msgSummary [$Current].msgReference); FOR tolist DO FWriteLn(outfile,'To Name: ' & toList[$current].EntityName); FWriteLn(outfile,'To Address: ' & toList[$current].address); END;
FWriteLn(outfile, ' ***Message Items**** '); FOR msgItems DO FWriteLn(outfile,msgItems [$current].Type); FWriteLn(outfile,msgItems [$current].Name); FWriteLn(outfile,msgItems [$current].BufferData); END; FWriteLn(outfile, '********************************* ******************* '); END; (*End of Else*) END; (*End of For LOOP*) FClose(outfile); END;(*End of Else*) END;(*End of IF*) UNTIL TRUE; MAILCloseMessageContainer(msgContainer); MAILCloseSession(sess); MAILTerminate(OMI_SMTP_POP_INTERFACE); WinMessageBox($Desktop,'Program Complete',$MBOK, 'Execution is complete. Check for output.'); END;
同时打开多个 TSD 脚本邮件会话是可能的。
要关闭 TSD 脚本邮件会话,调用 MAILCloseSession 语句。这样就释放了与 TSD 脚本邮件会话相关联的系统资源。
当您准备终止 TSD 脚本邮件接口时,必须首先关闭所有打开的 TSD 脚本邮件会话。然后您需要调用 MAILTerminate 语句。
本节列出了可能从 TSD 脚本邮件接口语句发生的的出错代码。错误可能会在消息传送处理中的几个点出现,在 VIM 或 MAPI 层,或在 TSD 脚本层。下表描述可能在这些层的每一层产生的错误代码。
注:如果函数执行成功,所有的 TSD 脚本邮件接口调用将返回值 1。否则,将返回一个负数。
下表列出了可能由 VIM 层生成的错误代码的详细信息。
错误 | 值 | 注释 |
OMISTS_FAILURE | -1 | 一般错误。 |
OMISTS_FATAL | -2 | 产生了致命错误。必须纠正错误后, 才能继续使用系统。 |
OMISTS_ALL_PARAMS_REQUIRED | -3 | 当基础消息系统对路径、名称和口令全部要求时,MAILOpenSession 返回此消息。 |
OMISTS_ATTACHMENT_NOT_FOUND | -4 | 指定的附件文件(在 MAILSendMessage 中)没有找到。 |
OMISTS_BAD_PARAM | -5 | 所要求的参数为未知, 参数超出范围或参数是无效的。 |
OMISTS_BUF_TOO_SMALL | -6 | TSD 脚本邮件接口使用缓冲区来 从消息系统检索值。此返回码 表示使用的缓冲区太小,不能容纳返回的值。 |
OMISTS_CONV_NOT_SUPPORTED | -7 | 此实现不支持指定的转换。 |
OMISTS_INSUFFICIENT_MEMORY | -8 | 由于内存不足内部操作失败。 |
OMISTS_INVALID_CONFIGURATION | -9 | 检测到无效的基本配置。 |
OMISTS_INVALID_OBJECT |
-10 | 对象句柄 (MAILSession、MAILContainer、MAILRef) 未知或无效。例 如,非邮件消息的句柄可能未 被传递给要求邮件消息的函数。 |
OMISTS_INVALID_PASSWORD | -11 | 传递给 MAILOpenSession 的口令无效。 |
OMISTS_INVALID_SELECTOR | -12 | 把选择器 (OMISEL_*) 传送给了此上下文中未知的 语句。 |
OMISTS_INVALID_SIGNATURE | -13 | 向 MAILVerifySignature 传送了无效的签名, 或消息已失密。 |
OMISTS_NAME_EXISTS | -14 | VIM 不使此返回代码。 |
OMISTS_NAME_NOT_FOUND | -15 | MAILSendMessage 立即验证接收者的姓名,而在指定的通讯录中没有找到这个名字。(如果没有指定通讯录, 则使用缺省通讯录。) |
OMISTS_NOT_SUPPORTED | -16 | 此实现不支持所调用的特性。 |
OMISTS_NO_COMMON_CERTIFICATES | -17 | MAILVerifyMessage 签名报告在接收者与签名者之间没有共同的证明。 |
OMISTS_NO_DEFAULT | -18 | MAILGetEntityName 不能在几个活动会话之间作出选择。一些实现可能会返回 时间最长的那个会话名称,而不是返回错误代码。 |
OMISTS_NO_MATCH | -19 | 找不到匹配。 |
OMISTS_NO_SIGNATURE | -20 | MAILVerifyMessage 签名报告 指定的消息没有包含签名。 |
OMISTS_NO_SUCH_ATTRIBUTE | -21 | 没有使用调用的属性。 |
OMISTS_OPEN_FAILURE | -22 | 当打开或新建一个文件时,产生了基于平台的错误。 |
OMISTS_PASS_REQUIRED | -23 | MAILOpenSession 报告要求口令 来打开本执行中的会话。 |
OMISTS_READ_FAILURE | -24 | 当打开或新建一个文件时,产生了基于平台的错误。 |
OMISTS_UNSUP_TYPE | -25 | 传递给 MAILSendMessage
或 MAILSendDerived
Message 的消息类型非 VIM_MAIL, 此实现不支持它。或者,MAILReadMessage 不支持读取 这种类型的项。 |
OMISTS_UNSUP_VERSION | -26 | TSD 脚本邮件接口与 基础 VIM 接口不匹配。 |
OMISTS_WRITE_FAILURE | -27 | 当对文件进行写操作时,产生了与平台有关的错误。 |
下表列出了可能由 MAPI 层生成的错误代码的详细信息。
错误 | 值 | 注释 |
MAPI_USER_ABORT | -201 | 用户取消了进程。函数未完成。 |
MAPI_E_FAILURE |
-202 | 产生了一个或多个不明错误。函数 未7完成。 |
MAPI_E_LOGIN_ FAILURE |
-203 | 用户没有成功登录。未 返回会话标识符。 |
MAPI_E_DISK_FULL |
-204 | 磁盘已满。 |
MAPI_E_INSUFFICIENT _MEMORY |
-205 | 没有足够的内存,无法继续。函数 未7完成。 |
MAPI_E_TOO_MANY_SESSIONS |
-208 | 同时打开的会话太多。 |
MAPI_E_ TOO_MANY_FILES | -209 | 附件文件太多。 |
MAPI_E_ TOO_MANY_RECIPIENTS | -210 | 指定的消息接收者太多。 |
MAPI_E_ATTACHMENT_NOT _FOUND |
-211 | 找不到要附到消息的一个或多个文件。 |
MAPI_E_ ATTACHMENT_OPEN_FAILURE | -212 | 找不到要附到消息的一个或多个文件。 |
MAPI_E_ ATTACHMENT_WRITE_FAILURE | -213 | 附件无法写到临时文件中。 检查目录权限。 |
MAPI_E_UNKNOWN_RECIPIENT | -214 | 地址列表中找不到接收者。 |
MAPI_E_BAD_RECIPTYPE | -215 | 没有指定接收者类型,或类型无效。 |
MAPI_E_INVALID_MESSAGE | -217 | 消息参考号是无效的。 |
MAPI_E_TEXT_TOO_LARGE | -218 | 消息正文太长。 |
MAPI_E_INVALID_SESSION | -219 | 会话标识符无效。 |
MAPI_E_TYPE_NOT _SUPPORTED |
-220 | 此实现不支持一个或多个类型。 |
MAPI_E_AMBIGUOUS _RECIPIENT |
-221 | 一个或多个接收者不明确。 |
MAPI_E_INVALID_RECIPS | -225 | 一个或多个接收者无效。 |
MAPI_E_NOT_SUPPORTED | -226 | 基础实现不支持此函数。 |
下面的表格列出了可能由 SMTP 生成的错误代码。
错误 | 值 | 注释 |
OMI_ERR_SMTP_OPENSESSION _FAILURE |
-3000 | 初始化 MAILOpenSession(..) 中的所有数据时失败。. |
OMI_ERR_SMTP_MAIL _FAILURE |
-3001 | 向 SMTP 服务器发送邮件命令时失败。 |
OMI_ERR_SMTP_CLOSE _FAILURE |
-3002 | 向 SMTP 服务器发送关闭命令时失败。 |
OMI_ERR_SMTP_VERIFY _FAILURE |
-3003 | SMTP 服务器不能验证接收者列表中的某个用户。 |
OMI_ERR_ATTACH_FILE _ERROR |
-3004 | 指定为附件的文件或是不存在, 或是文件名格式不正确。 |
OMI_ERR_SMTP_OPEN_SERVER _FAILURE |
-3005 | 打开与 SMTP 服务器的连接时失败。 |
OMI_ERR_POP_OPEN_FAILURE | -3006 | 打开与 POP 服务器的连接时失败。 |
OMI_ERR_INVALID_PASSWORD | -3007 | 口令验证失败。 |
OMI_ERR_POP_STAT_FAILURE | -3008 | 向 POP 服务器发送 stat 命令时失败。 |
OMI_ERR_POP_RETR_FAILURE | -3009 | 向 POP 服务器发送 retr 命令时失败。 |
OMI_ERR_POP_DELE_FAILURE | -3010 | 向 POP 服务器发送 delete 命令时失败。 |
OMI_ERR_POP_QUIT_FAILURE | -3011 | 向 POP 服务器发送 quit 命令时失败。 |
OMI_ERR_SOCKET_FAILURE | -3012 | 套接字调用失败。 |
OMI_ERR_PARSE_MESSAGE _FAILURE |
-3013 | 分析消息调用失败。 |
OMI_ERR_INVALID_FILE | -3014 | 文件大小为 0。 |
OMI_ERR_SERVICE_NOT _AVAILABLE |
-3421 | 如果服务知道它必须关闭时,本项可以是对任何 SMTP 命令的应答。 |
OMI_ERR_MAILBOX_BUSY | -3450 | 邮件箱可能忙。 |
OMI_ERR_LOCAL_ERROR_IN _PROCESSING |
-3451 | 由于处理时的本地错误,所要求的操作中断。 |
OMI_ERR_INSUFFCIENT _SYSTEM_STORAGE |
-3452 | 系统存储器不足,所要求的操作中断。 |
OMI_ERR_SYNTAX_ERROR | -3500 | 语法错误,不能识别命令。 |
OMI_ERR_SYNTAX_ERROR_IN _PARAMETER |
-3501 | 参数或自变量语法错误。 |
OMI_ERR_COMMAND_NOT _IMPLEMENTED |
-3502 | 命令没有实现。 |
OMI_ERR_SEQUENCE_ERROR | -3503 | 错误的命令顺序。 |
OMI_ERR_PARAMETER_NOT _IMPLEMENTED |
-3504 | 命令参数未实现。 |
OMI_ERR_MAILBOX _UNAVAILABLE |
-3550 | 要求的操作不能执行:邮件箱不可用。 |
OMI_ERR_USER_NOT_LOCAL | -3551 | 用户不在本地;请试用 <forward-path> |
OMI_ERR_EXCEEDED _STORAGE_ALLOCATION |
-3552 | 请求的邮递操作中断:超过存储器分配。 |
OMI_ERR_MAILBOX_NAME _NOT_ALLOWED |
-3553 | 邮箱名未经许可。 |
OMI_ERR_TRANSACTION _FAILED |
-3554 | 事务失败 |
OMI_ERR_SOCKET_ERROR | -3099 | 套接字通信出错 |
下表列出了可能由 Script 脚本生成的错误代码的详细信息。
错误 | 值 | 注释 |
OMI_ERR_INVALID_BUFFER _TYPE |
-2000 | 在 Mail 项的记录中指定了无效的缓冲类型 |
OMI_ERR_INVALID_BUFFER _DATA |
-2001 | 缓冲数据无效。 |
OMI_ERR_NO_MEMORY | -2002 | 系统内存资源耗尽。 |
OMI_ERR_INVALID_FILENAME | -2003 | 文件名无效。 |
OMI_ERR_NO_TOLIST | -2004 | 没有指定 "To" 列表。 |
OMI_ERR_BAD_PARAM | -2005 | 指定了无效的参数。 |
OMI_ERR_NO_NESTED _MESSAGE |
-2006 | 在请求的层上没有找到嵌套消息。 |
OMI_ERR_TOO_MANY_FILE _NAMES |
-2007 | 指定的文件名太多。 |
OMI_ERR_UNSUPPORTED _PROTOCOL |
-2008 | 协议自变量的值无效或 此协议不被支持。 |
OMI_ERR_UNSUPPORTED _FEATURE |
-2009 | 在本实现中此特性不可用。 |
OMI_ERR_NOT_IMPLEMENTED | -2010 | 还未实现此特性。 |
OMI_ERR_UNKNOWN_ITEM _CLASS |
-2011 | 项目类未知。 |
OMI_ERR_INVALID_NOTE_PART | -2012 | 消息的备注部分无效。 |
OMI_ERR_MAPI_FAILURE | -2013 | 在对 MAPI 接口进行程序设计时出错。 |
OMI_ERR_NOT_INITIALISED | -2014 | 还未初始化邮件接口。在使用 TSD 邮件接口之前必须调用 MailInitialize。 |
OMI_ERR_COULD_NOT_LOAD _DLL |
-2015 | TSD 脚本邮件不能加载 MAPI 或 VIM DLL。 |
KML_ERR_UNKNOWN_ITEM _CLASS |
-5000 | 指定了未知的项目类。 |
KML_ERR_UNKNOWN_ITEM _TYPE |
-5001 | 指定了未知的项目类型。 |
KML_ERR_UNKNOWN_BUFFER_TYPE | -5002 | 指定了未知的缓冲类型。 |
KML_ERR_UNKNOWN_BUFFER_DATA | -5003 | 指定了未知的缓冲数据。 |
下面是有效的 TSD 脚本邮件常量。
常量 | 值 |
OMISEL_ADDRESS | 1 |
OMISEL_ATTACH | 6 |
OMISEL_BCC | 9 |
OMISEL_CC | 10 |
OMISEL_CCMAIL | 11 |
OMISEL_CLASS | 13 |
OMISEL_CP1252 | 16 |
OMISEL_CP437 | 17 |
OMISEL_CP850 | 18 |
OMISEL_ENTITY | 26 |
OMISEL_FORWARD | 33 |
OMISEL_GROUP | 38 |
OMISEL_LMBCS | 44 |
OMISEL_MHS | 49 |
OMISEL_NOT_SUPPORTED | 61 |
OMISEL_NOTE_PART | 62 |
OMISEL_NOTES | 63 |
OMISEL_REPLY | 77 |
OMISEL_TO | 97 |
OMISEL_UNICODE | 99 |
OMISEL_UNKNOWN_RECIP_TYPE | 101 |
OMISEL_UNWRAPPED_TEXT | 105 |
OMISEL_X400 | 107 |
OMISEL_X500 | 108 |
OMI_MAIL | 'VIM_MAIL' |
OMI_RTF | 'VIM_RTF' |
OMI_DLR | 'VIM_DLR' |
OMI_NDLR | 'VIM_NDLR' |
OMI_PRIVATE | 'VIM_PRIVATE' |
OMI_PUBLIC | 'VIM_PUBLIC' |
OMI_RTRC | 'VIM_RTRC' |
OMI_TEXT | 'VIM_TEXT' |
OMI_UNWRAPPED_TEXT | 'VIM_UNWRAPPED _TEXT' |
OMI_LOW_PRIORITY | 0 |
OMI_NORMAL_PRIORITY | 1 |
OMI_HIGH_PRIORITY | 2 |
OMI_HISTORY | 1 |
OMI_INHERIT_CONTENTS | 2 |
OMI_ALL_RECIPIENTS | 4 |
OMI_UNREADONLY | 2 |
OMI_NORMAL_SENS | 0 |
OMI_PRIVATE_SENS | 1 |
OMI_PERSONAL_SENS | 2 |
OMI_CO_CONFID_SENS | 3 |
OMI_APP_DEF_SENS | 16384 |
OMI_FILE_DATA | 1 |
OMI_ACTUAL_DATA | 2 |
OMI_REVERSE_SCAN | 1 |
OMI_UNREAD_ONLY | 2 |
OMI_SMTP_POP_INTERFACE | 3 |
可在安装有开发工具包的目录下找到完整的 mail.kb 文件。
Tivoli 服务台 6.0 开发工具包脚本程序设计指南