0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Domino接口结合VB6工具来开发一个邮件扩展工具

机电信息杂志 来源:机电信息杂志 2023-01-31 09:06 次阅读

摘 要:

介绍了Lotus Notes内自带的部分组件以及Domino接口的应用,阐述了如何使用Domino接口结合VB6工具来开发一个邮件扩展工具,实现批量查询是否已读、批量修改、批量撤回等便捷功能。

引言

Lotus Notes于1989年创立,是一个企业级通信、协同工作平台,拥有安全性高、易于管理等优点,符合企业网对应用的要求。笔者单位是以基于Lotus Notes 7.0的定制版本作为内部协同办公工具,由于该版本最后更新时间为2005年,许多功能已远远落后于时代,不够人性化,给实际工作带来了一定的阻碍。所幸Lotus Notes自带Lotus Script脚本语言可供开发人员在lotus designer中进行更多个性化开发,并且提供了一个COM类接口,可在VB、#C、java等语言中调用[1]。

Visual Basic(以下简称“VB”)是与Lotus同时代非常受欢迎的开发语言,具有易学易用、编程简洁、可视化UI设计、程序集成化程度高等优点,非常适用于快速开发小型窗体程序。

尽管VB在如今看来也是落后于时代的产物,但考虑到Lotus Script语法基本与VB相同以及VB开发窗体应用的便捷性,因此还是决定采用VB6作为开发工具引入Lotus Domino Object组件进行邮件扩展工具开发。

1

需求分析

用户在使用Lotus Notes发送邮件操作中,难免会出现重要公文、邮件内容有误或收件人有误等情况,希望能立即撤回错误邮件并重新发送正确邮件,由于不希望错误内容被阅读,所以整个过程越快越有利;在执行删除之前,有的用户可能仅想知道邮件在收件人当中的已读情况,根据已读/未读比例再进行下一步操作的决策;对于较小的错误,如果能实现静默修正功能,更能改善用户体验。

Lotus Notes 7.0版本并没有自带查询邮件是否已读和撤回功能,并且从单位管理制度考虑,即使具有该功能,由于无法被管理员有效监管,可能会导致该功能被大量滥用,增加服务器负担,甚至造成宕机风险。传统的方法是,用户提出申请并得到管理员审核通过后,使用Notes自带的邮件删除工具进行删除[2]。

新建删除命令,填写所需删除邮件的标题,必须保证完全相同。经过一系列繁杂的设置后启动程序,该工具将会在服务器中遍历搜索所有用户数据库中该邮件的数据,检索到后则执行删除。整个过程非常漫长且卡顿,浪费算力,并且由于其检索逻辑是以标题作为关键字,为避免被误删,所以用户需要等待整个过程完成后才可以重新发出新邮件。管理员希望能减少人工操作,执行快捷方便,并能自动导出相关日志记录代替手工录入,在执行操作后用户可以立即重新发送邮件,无须等待过程完成。

2

设计思路

第一步,分析数据结构。根据官方提供的开发文档以及在客户端内查看邮件属性,可以得到一封邮件的所有属性字段(图1)。其中,$MessageID为邮件标志,$Orig为邮件唯一标志(与$MessageID主要区别为,当一个用户发件箱和收件箱皆有该邮件时,为确保$Orig在该用户数据库中的唯一性,收件箱中邮件的$Orig值会改变,而$MessageID则保持不变);SendTo为收件人数组;CopyTo为抄送人数组;BlindCopyTo为密送;From为发件人;Subject为主题;PostDate为发件时间;Body为正文内容;ISNEWDOC为是否已读标志。以上为本次开发主要使用的属性。 ac10c2b4-a0ff-11ed-bfe3-dac502259ad0.png

第二步,检索邮件方式。从数据结构来看,既然每封邮件有其自身唯一对应的主key,比起note自带的工具采用标题为关键字进行检索,选择使用$MessageID会更加准确和高效,同时也支持标题精确检索以及模糊检索。

第三步,进入收件人数据库进行检索。由于每封邮件的收件人是有限的,无须全局遍历检索,只需要进入每个收件人的数据库检索即可,能够节省大量的检索时间。可以通过MessageID获取该邮件对象,然后获取SendTo数据从而取得收件人列表。

第四步,检索出来后读取ISNEWDOC字段判断邮件是否已读,使用RemovePermanently(True)方法执行删除操作或ReplaceItemValue()方法执行替换修改操作。

所有操作执行完毕后,该邮件即已完全消失或者被修正,达到了邮件撤回或静默修改的目的,操作结束。

3

窗体设计

根据设计思路第二步,用户需要提供发件人信息以及需要撤回的邮件的MessageID,因此绘制两个输入框,为了提供关于该邮件的更多信息以便管理员确认,故加上主题、发送时间、正文显示区域。绘制按钮用以触发检索、修改及删除等操作。根据管理员需求,再绘制状态区域即运行过程细节展示区域以及导出日志按钮。

4

开发

首先在Visual Basic 6中引用Lotus Domino Objects接口组件(图2)。

ac1e0a96-a0ff-11ed-bfe3-dac502259ad0.png

主要用到以下几个模块代码(仅列出部分核心代码,非完整代码):

4.1

核心方法介绍

CreateObject("Notes.NotesSession"):获取当前Note登录的Session对象;GetDatabase("数据库地址", "names.nsf"):进入通信录数据库;Search():方法搜索发件人地址;GetFirstDocument():获取第一条搜索结果;GetFirstItem(字段名):获取指定字段;GetDatabase(服务器,数据库):获取数据库;GetLastDocument():获取搜索结果中的最后一个文档;emovePermanently(True)彻底删除邮件(如果是false则是删除到回收站);ReplaceItemValue(属性,值):替换属性值。

4.2

初始化

Dim aDC As Object;Dim Maildoc As Object;Dim session As Object;Dim Maildb As Object;Dim view As Object;Dim a() As String;Dim arr() As String;Set session = CreateObject("Notes.NotesSession")

4.3

检索邮件

Set Maildb = session.GetDatabase("数据库地址", "names.nsf") '进入通信录;If Not Maildb.IsOpen Then Maildb.Open;fajian=Text1.Text;Set aDC = Maildb.Search("owner=""" & fajian & """ & type=""Person""", Nothing, 0) '在通信录中搜索该地址;Set Maildoc = aDC.GetFirstDocument() '取得该条文档;Set rtitem1 = Maildoc.GetFirstItem("MailServer") '取得其所属服务器sername = rtitem1.Text

Set rtitem2 = Maildoc.GetFirstItem("MailFile") '取得其数据库地址;dbname = rtitem2.Text;Set Maildb = session.GetDatabase(sername, dbname) '进入其邮箱;If Not Maildb.IsOpen Then Maildb.Open;If Combo1.Text = "MessageID" Then;docid = Left(Trim(Replace(Replace(Replace(Text2.Text, """", ""), Chr(13), ""), Chr(10), "")), 49) '输入邮件ID;Keyword = "@Contains($MessageID;""" & docid & """)";End If;Set aDC = Maildb.Search(Keyword, Nothing, 0) '搜索该邮件;Set Maildoc = aDC.GetLastDocument() '获取该邮件;

Set rtitem3 = Maildoc.GetFirstItem("SendTo") '获取收件人;Set rtitem4 = Maildoc.GetFirstItem("CopyTo")“获取抄送人;

Setsubject1= Maildoc.GetFirstItem("Subject") '获取标题;

Setposttime= Maildoc.GetFirstItem("PostedDate") '获取发件时间;

4.4

执行查询是否已读/修改/删除操作

Set Maildb= session.GetDatabase("JMEP02MAD/servers/Geph", "names.nsf"); Set aDC= Maildb.Search("owner=""" & a(i) & """ & type=""Person""", Nothing, 0) '查找收件人

Set Maildoc = aDC.GetFirstDocument() ;

Set rtitem1 = Maildoc.GetFirstItem("MailServer");sername = rtitem1.Text;Set rtitem2 = Maildoc.GetFirstItem("MailFile") ; dbname = rtitem2.Text; Set Maildb = session.GetDatabase(sername, dbname)

On Error Resume Next

Call Maildoc.RemovePermanently(True)

4.5

交互优化

在上述核心代码的基础上,加入一些容错机制、自动补全、群组收件人展开、按照主题模糊查询、邮件批量修改、日志导出、仅删除未读等功能优化客户体验,具体代码不再赘述。

5

测试

开发完成后进行测试,顺利运行成功(图3)。 ac4330c8-a0ff-11ed-bfe3-dac502259ad0.png

6

结语

使用Domino接口与VB开发语言,既可以发挥Lotus Note强大的文档处理能力,又可以发挥VB友好的可视化功能,并且开发快捷,工作效率提升明显。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Com
    Com
    +关注

    关注

    1

    文章

    103

    浏览量

    40394
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    19944
  • Domino
    +关注

    关注

    0

    文章

    3

    浏览量

    6387

原文标题:基于Visual Basic的Lotus Notes邮件扩展工具开发

文章出处:【微信号:机电信息杂志,微信公众号:机电信息杂志】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    1000元求助把已有的多水平模型matlab源码改编为VB6

    及其统计诊断》书的多水平模型matlab源码和书中的验证数据格式;我负责提供WLwiN多水平模型软件和试用手册。我只需要VB算法源码部分。其他VB的应用界面,例如输入、显示表格和图形由我自己
    发表于 09-24 12:17

    Labview怎样调用VB6生成的DLL

    请教Labview调用VB6生成的DLL,我现试了好多不行,在此还高手支招,不胜感激!QQ:***,***:18934586535 急急急
    发表于 12-18 21:48

    【招聘】高级ATE测试开发

    I'm looking for Sr. talent of ATE Test develop.Have Test Software programming skills with VB6
    发表于 09-19 23:01

    如何使用VB.net跟踪捕获

    我已经找到了很多关于如何使用VB6捕获跟踪的示例,但没有使用VB.net。只有viScanf可用于VB.net如何使用viScanf获取跟踪? 以上来自于谷歌翻译 以下为原文I have
    发表于 12-25 16:28

    请问在VB6里这个文件如何移除?

    再问下问题,在VB6里这个文件如何移除呀,谢谢(有图有真相)
    发表于 06-18 04:37

    使用Domino与WingFTP进行集成

    为什么不是通过以前提到的Domino与AD进行集成,是因为Domino在AD进行集成时,密码同步的问题直无法解决,而且Domino与AD的集成配置相当的麻烦。所以目前暂时放弃使用此方
    发表于 07-19 08:20

    使用Domino与WingFTP集成

    目前根据公司的需求,结合相关FTP软件的具体功能。建议使用Domino与WingFTP进行集成。
    发表于 07-24 07:27

    FreeSWITCH使用swig工具支持多种开发语言的方法

    语言,如C#、VB.NET等。FreeSWITCH源代码中的swig脚本和程序已被转换成各种语言的接口了,因而开发者不需要安装swig工具就可以使用。在此,记录使用**C#**语言
    发表于 12-23 06:32

    VB6开发宝典

    VB6开发宝典:Visual basic 6.0 概述,Visual basic特点,Visual basic集成开发环境,Visual basic编程基础,控制编程,窗体,菜单与对话框,类与对象。
    发表于 02-06 16:44 81次下载

    VB6循序渐进教程

    VB6循序渐进教程
    发表于 02-06 16:52 49次下载

    VB精密定时控件下载

    有些朋友在使用VB6时会发现,VB6 的Timer控件定时是比较差的,附件是一个ms级的定时控件,弥补了VB6中没有精密定时控件的空白。
    发表于 10-29 16:41 65次下载

    基于VB6的园林植物信息管理系统设计

    在当前园林植物管理中,亟待应用现代信息技术实现对园林植物的信息化管理;基于VB6界面技术,分析设计园林植物管理及信息系统的需求,从而可以结合园林植物管理现状,优化设计实现基于VB6界面的园林植物管理
    发表于 11-01 17:55 1次下载
    基于<b class='flag-5'>VB6</b>的园林植物信息管理系统设计

    如何使用入门工具开发工具在目标板上仿真和调试固件的详细资料概述

    入门工具包预装了演示软件,可帮助用户探究 dsPIC33E DSC 系列 (dsPIC33E USB 入门工具包)或 PIC24E MCU 系列 (PIC24E USB 入门工具包)的新特性。它还允许用户通过模块化
    发表于 06-13 08:27 12次下载

    PIC32通用入门工具开发工具的详细中文资料概述

    工具包预装了演示软件,可帮助用户探究 PIC32 的新特性。它还允许用户通过模块化扩展接口对其功能进行扩展。入门工具包还提供板载电路,可实现
    发表于 06-13 14:27 12次下载
    PIC32通用入门<b class='flag-5'>工具</b>包<b class='flag-5'>开发工具</b>的详细中文资料概述

    VB6 OPC Client文件分享

    VB6 OPC Client文件分享
    发表于 08-28 10:20 0次下载