HCL 中文技术社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2429|回复: 0

用LotusScript读取mstore数据库展示所有邮件来往信息

[复制链接] TA的帖子

91

主题

123

帖子

2599

积分

超级版主

Rank: 8Rank: 8

积分
2599

活跃会员热心会员灌水之王最佳新人

发表于 2020-11-2 21:39:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大家好,才是真的好。

今天的标题有点长。前面一篇我们讲了Lotusscript语言,这一篇接着来讲。不过是很有实际运用案例,即读取mtstore.nsf数据库中的数据,用来展示所有系统中的邮件来往信息。

很多人不知道mtstore.nsf数据库是干啥的。这个库呢,是记录所有往来邮件情况的摘要信息(如发件人,收件人,邮件到达时间、邮件传递状态等)。利用这些数据我们可以统计出邮件的情况报告,比如每天该服务器上总计收发了多少封邮件、哪些人投递邮件最多等等。

这个功能很早就出现,应用场景也很多。但用的人少,时代发展到现在,很多人需要即时进行可视化展现。本篇当然不是可视化的展示方式,而数据分析的一种案例。

首先我们得启用邮件追踪,这样Domino才会记录信息到mtstore.nsf,而后我们才能进行下一步处理。

要开启邮件追踪,首先到服务器配置文档中,在如下位置进行检查是否开启:

1.png

如果第一次开启,可以输入load mtc命令来立即运行mtc邮件信息监控收集任务(你也可以等)开启之后,mtc默认15分钟收集一次数据存放到mtstore.nsf数据库中。等mtstore.nsf中有数据了,各位读者也可以参考帮助文档,运行统计报告,这里我列举一下统计报告位置:

2.png


不过我们的主要目的是Lotusscript进行处理,首先得对mtstore.nsf数据库里的文档数据结构有一个认识。

实际上,mtstore.nsf不会对应每封电子邮件存储一个记录,而是通过表格记录,总共是5个表格,每个文档记录200个电子邮件文档的信息,而后会生成一个新的记录,如下图所示:

3.png


为了读取方便,建议大家把mtstore.nsf做个复本放到Notes客户机本地。

好了,现在是时候表演我们的开发技术了。

在Domino Designer中按Ctrl+N,在出现的新建对话框中,选择本地创建(我们都在本地执行),输入数据库标题,选择空白模板,如下图:

4.png

在里面创建一个表单,比如叫做newinfo或什么之类,在里面创建几个字段(需要记录的信息,你也可以加入更多,比如Subject),比如sender、Recipient、TimeStamp、MessageSize;如下图

5.png

而后建一个视图,里面几个列,对应上图表单中的字段,如下图

6.png


重点是代理。我们创建一个代理,取名getinfo,然后填入下面代码:

Dim s As New NotesSession
Dim db As New NotesDatabase( "", "" )
Dim data As NotesDatabase
Dim newdoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim view As NotesView
Dim reccount As String
Dim first As String
Dim i As Integer

Set data = s.CurrentDatabase
Call db.Open(data.Server,"mtdata\mtstore.nsf")

reccount =1

Set dc=db.AllDocuments  'Go get all the documents at the beginning
Set view=db.GetView("MailTracking Data")


If  Not(view Is Nothing) Then
Set doc=view.GetFirstDocument
While Not(doc Is Nothing)
For i=0 To Ubound(doc.inorg)
Print "Working on document number "+reccount+" and index= "+Cstr(i)
Set newdoc =New NotesDocument(data)
Dim counter As Integer
If Instr(doc.inorg(i),"`") Then
first=Strleft(Strright(doc.inorg(i),"`"),"`")
counter=Cint(first)
Newdoc.sender=doc.inorg(counter)

Else
    Newdoc.sender=doc.inorg(i)
End If
                               
If Instr(doc.inrcp(i),"`") Then
first=Strleft(Strright(doc.inrcp(i),"`"),"`")

counter=Cint(first)

Newdoc.Recipient=doc.inrcp(counter)
Else

Newdoc.Recipient=doc.inrcp(i)

End If

Newdoc.TimeStamp=doc.msgtm(i)
Newdoc.MessageSize=doc.msgsz(i)
newdoc.form="newinfo"
Call newdoc.Save(True, False)
Next

Set doc = view.GetNextDocument(doc)
reccount=reccount+1
Wend

End If

设置下属性,效果如下图:

7.png
最后在后台,或Notes客户机前端里运行一下,如下图:

8.png

我们就能得到所有来往的邮件记录,如下图

9.png


是不是很有用?本篇的内容参考了
https://ds-infolib.hcltechsw.com/ldd/dominowiki.nsf/dx/Reading_the_MTSTORE_Database

如有帮助,欢迎大家阅读原文。今天我们就写到这里吧。

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

QQ|手机版|小黑屋|HCL 中文技术社区 ( 沪ICP备17044822号 )

GMT+8, 2023-12-12 07:15 , Processed in 1.061836 second(s), 25 queries .

快速回复 返回顶部 返回列表