论文部分内容阅读
摘 要:分析Lotus邮件系统发送邮件中存在的不足,讨论Visual Basic编程实现业务软件自动调用lotus邮件系统发送邮件的方法,并给出了不用登陆Lotus邮件系统而直接快速发送Lotus邮件的实现代码。
关键词:Visual Basic;Lotus;代码;邮件;程序;发送
中图分类号:TP393.098
Lotus Notes邮件系统由世界著名的IBM公司开发,采用了最新的Domino邮件技术,具有友好用户界面、可编辑性强、支持二次开发、邮件安全性高等诸多优点,广泛应用于企事业单位,是气象部门日常办公及重要资料如灾情直报、预警信号及时上传的重要保障,但是Lotus邮件系统却有占用内存空间大、运行中操作过快就会导致程序异常终止退出、业务人员每次都需要打开Lotus邮件系统输入用户名和密码才能发送邮件等缺点。
Visual Basic 6.0是所有编程工具中最易学的一种,它提供的大量可视化控件,可方便用户快速的开发出满足需求的软件,而Lotus邮件的数据库是安全性较高的文档型数据库,它不同于微软的Office Access数据库,也不同于Sql、Oracle等大型关系型数据库,因为它的数据库数据不是可视化的,那么,怎么通过代码实现对Lotus邮件系统的操纵来优化业务、让其更加人性化是本文分析的重点,本文将在文中给出相关功能的实现代码,以期提高工作效率。
1 设计思路
Visual Basic虽然可以通过Widows传统的OLE特征中的对象和方法去访问调用打开Lotus客户端(虽然能实现对Lotus程序的调用,但是却没有为计算机内存减轻负担,更没有提高发送速率,这和从计算机上直接运行Lotus邮件系统没有本质区别),目前宁夏全区气象系统使用的是Lotus邮件系统的最新版Notes R8.02 客户端,它提供了一个强大的后台处理类Notus Session,这为使用代码访问NotesDatabase,Notes视图等对象提供了一个平台,即我们不用打开文档型数据库,但可以通过这个类去调用一些程序处理函数,对数据库中的数据进行视图定位、全文检索,数据存取等。同时后台处理类的独立运行功能使得我们在开发时可不必调用整个Lotus客户端就能实现邮件发送的功能,可大大减轻计算机内存占用率。
2 程序实现
首先必须确保你的计算机上安装了Notes R8.02 客户端,并且配置完整能够收发邮件,在使用Visual Basic开发时必须先引用Lotus Domino Objects和Lotus Notes Automation Classess。
针对Lotus每次登陆时都要输入用户名和密码的问题,我们采用一次设定永久登陆的方法,在VB中建立模块1,建立一个文件读取函数和一个文件写入函数,然后在Lotus用户名和密码设置窗口:
这样在应用程序中,只要每次从ini中自动读取本站Lotus用户名和密码,就实现了一次设置永久登陆了。
先在通用代码窗口里定义全局变量用于存储从ini文件中自动读取的本站Lotus用户名和密码,代码如下:
Public pwd, user As String
pwd = ReadString(App.Path & "\ini\" & "lotus用户名密码.ini", "lotus", "pwd", 100)
user = ReadString(App.Path & "\ini\" & "lotus用户名密码.ini", "lotus", "user", 100)
以下函数模块为实可发送多个附件给多个收件人
Public Sub famail(biaoti As String, fj() As Variant, recipient() As Variant, zhengwentext As String, saveit As Boolean)
Dim zhengwen
Dim n As Integer
'Dim duqu As String
Dim dbase As New NotesDatabase
'定义邮件数据库
Dim username As String
'定义本站用户notes名称
'Dim pwd As String
Dim dbasename As String
'定义本站用户邮件数据库
Dim newmail As New NotesDocument
'定义邮件中的文档"
Dim txtobj As New NotesRichTextItem
'定义文本对象
Dim mysession As New NotesSession
'定义notes会话
Dim fjdx As New NotesEmbeddedObject
'定义附件对象
'创建notes会话
Set mysession = CreateObject("lotus.notessession")
Call mysession.Initialize(pwd)
dbasename = "mail\" & user & ".nsf"
'读取本站的Lotus邮箱名 如永宁.nsf
Set dbase = mysession.GetDatabase("beyc_s/宁夏/cma", dbasename) '在notes.ini文件中可找到你自己的服务器
If dbase.IsOpen Then
Else
End If
'创建新邮件
Set newmail = dbase.CreateDocument
Call newmail.ReplaceItemValue("form", "memo")
'设定接受者,jieshou为一数组,只给一个人时可设为一变量
Call newmail.ReplaceItemValue("sendto", recipient)
'邮件标题
Call newmail.ReplaceItemValue("biaoti", biaoti)
'邮件正文内容
Set zhengwen = newmail.CreateRichTextItem("zhengwen")
Call zhengwen.AppendText(zhengwentext)
'添加附件
Call zhengwen.AddNewLine(6)
For n = 0 To (c - 1)
Call zhengwen.Fjdxect(1454, "", fj(n), "fj")
Next n
'保存多个附件
newmail.SaveMessageOnSend = True
'发送邮件
Call newmail.ReplaceItemValue("posteddate", Now())
'获取邮件当前发送时的系统时间
Call newmail.Send(False)
'释放对象
Set dbase = Nothing
Set newmail = Nothing
Set txtobj = Nothing
Set mysession = Nothing
Set fjdx = Nothing
End Sub
利用以下模块实现邮件的发送功能
Dim mybiaoti As String '标题
Dim myfj() As Variant
'附件文件名,可发送多个附件
Dim jieshou() As Variant
'邮件接收者,可多个
Dim myzhengwentext As String
Dim mysaveit As Boolean
Dim I, d, w, p, S As Integer
Dim ss As String
Dim myshou() As String
Dim fujian() As String
myshou = Split(Text1.Text, vbCrLf)
fujian = Split(Text4.Text, vbCrLf)
mybiaoti = Trim(Text2.Text)
k = UBound(myshou)
ReDim jieshou(0 To d - 1) '确定有d-1个接收者
For I = 0 To (d - 1)
jieshou(I) = myshou(I)
Next I
p = UBound(fujian)
'获得用户选择的附件个数
c = p
ReDim myfj(0 To p - 1)
For S = 0 To (p - 1)
myfj(S) = fujian(S)
Next S
Call famail(mybiaoti, myfj(), jieshou(), myzhengwentext, mysaveit)
'调用famail函数发送邮件
以上代码经多次验证均能实现将邮件成功发送给指定收件人。
3 结束语
采用VB编程实现将Lotus邮件系统与县级乡镇精细化预报系统进行挂接,既实现了资料的及时上传,同时又充分利用VB实现了界面的简洁美观和Lotus系统的优化,程序运行中只是调用了Lotus的后台处理类,同时不需要每次输入用户名和密码登陆Lotus邮件系统发送邮件 ,大大节省了内存空间,提高了邮件发送速率,进而提高了工作效率。
参考文献:
[1]崔晓阳.用Treeview控件实现树形管理信息系统[J].农业网络信息,2007(01):135-136.
[2]罗琳,陈怡之,陈斌.Notes编程疑难详解[M].北京:人民邮电出版社,2000.
作者简介:钮海全(1960.12-),男,山西人,科长,大气探测工程师。
作者单位:宁夏银川市气象局,银川 750000;宁夏贺兰县气象局,银川 750200
关键词:Visual Basic;Lotus;代码;邮件;程序;发送
中图分类号:TP393.098
Lotus Notes邮件系统由世界著名的IBM公司开发,采用了最新的Domino邮件技术,具有友好用户界面、可编辑性强、支持二次开发、邮件安全性高等诸多优点,广泛应用于企事业单位,是气象部门日常办公及重要资料如灾情直报、预警信号及时上传的重要保障,但是Lotus邮件系统却有占用内存空间大、运行中操作过快就会导致程序异常终止退出、业务人员每次都需要打开Lotus邮件系统输入用户名和密码才能发送邮件等缺点。
Visual Basic 6.0是所有编程工具中最易学的一种,它提供的大量可视化控件,可方便用户快速的开发出满足需求的软件,而Lotus邮件的数据库是安全性较高的文档型数据库,它不同于微软的Office Access数据库,也不同于Sql、Oracle等大型关系型数据库,因为它的数据库数据不是可视化的,那么,怎么通过代码实现对Lotus邮件系统的操纵来优化业务、让其更加人性化是本文分析的重点,本文将在文中给出相关功能的实现代码,以期提高工作效率。
1 设计思路
Visual Basic虽然可以通过Widows传统的OLE特征中的对象和方法去访问调用打开Lotus客户端(虽然能实现对Lotus程序的调用,但是却没有为计算机内存减轻负担,更没有提高发送速率,这和从计算机上直接运行Lotus邮件系统没有本质区别),目前宁夏全区气象系统使用的是Lotus邮件系统的最新版Notes R8.02 客户端,它提供了一个强大的后台处理类Notus Session,这为使用代码访问NotesDatabase,Notes视图等对象提供了一个平台,即我们不用打开文档型数据库,但可以通过这个类去调用一些程序处理函数,对数据库中的数据进行视图定位、全文检索,数据存取等。同时后台处理类的独立运行功能使得我们在开发时可不必调用整个Lotus客户端就能实现邮件发送的功能,可大大减轻计算机内存占用率。
2 程序实现
首先必须确保你的计算机上安装了Notes R8.02 客户端,并且配置完整能够收发邮件,在使用Visual Basic开发时必须先引用Lotus Domino Objects和Lotus Notes Automation Classess。
针对Lotus每次登陆时都要输入用户名和密码的问题,我们采用一次设定永久登陆的方法,在VB中建立模块1,建立一个文件读取函数和一个文件写入函数,然后在Lotus用户名和密码设置窗口:
这样在应用程序中,只要每次从ini中自动读取本站Lotus用户名和密码,就实现了一次设置永久登陆了。
先在通用代码窗口里定义全局变量用于存储从ini文件中自动读取的本站Lotus用户名和密码,代码如下:
Public pwd, user As String
pwd = ReadString(App.Path & "\ini\" & "lotus用户名密码.ini", "lotus", "pwd", 100)
user = ReadString(App.Path & "\ini\" & "lotus用户名密码.ini", "lotus", "user", 100)
以下函数模块为实可发送多个附件给多个收件人
Public Sub famail(biaoti As String, fj() As Variant, recipient() As Variant, zhengwentext As String, saveit As Boolean)
Dim zhengwen
Dim n As Integer
'Dim duqu As String
Dim dbase As New NotesDatabase
'定义邮件数据库
Dim username As String
'定义本站用户notes名称
'Dim pwd As String
Dim dbasename As String
'定义本站用户邮件数据库
Dim newmail As New NotesDocument
'定义邮件中的文档"
Dim txtobj As New NotesRichTextItem
'定义文本对象
Dim mysession As New NotesSession
'定义notes会话
Dim fjdx As New NotesEmbeddedObject
'定义附件对象
'创建notes会话
Set mysession = CreateObject("lotus.notessession")
Call mysession.Initialize(pwd)
dbasename = "mail\" & user & ".nsf"
'读取本站的Lotus邮箱名 如永宁.nsf
Set dbase = mysession.GetDatabase("beyc_s/宁夏/cma", dbasename) '在notes.ini文件中可找到你自己的服务器
If dbase.IsOpen Then
Else
End If
'创建新邮件
Set newmail = dbase.CreateDocument
Call newmail.ReplaceItemValue("form", "memo")
'设定接受者,jieshou为一数组,只给一个人时可设为一变量
Call newmail.ReplaceItemValue("sendto", recipient)
'邮件标题
Call newmail.ReplaceItemValue("biaoti", biaoti)
'邮件正文内容
Set zhengwen = newmail.CreateRichTextItem("zhengwen")
Call zhengwen.AppendText(zhengwentext)
'添加附件
Call zhengwen.AddNewLine(6)
For n = 0 To (c - 1)
Call zhengwen.Fjdxect(1454, "", fj(n), "fj")
Next n
'保存多个附件
newmail.SaveMessageOnSend = True
'发送邮件
Call newmail.ReplaceItemValue("posteddate", Now())
'获取邮件当前发送时的系统时间
Call newmail.Send(False)
'释放对象
Set dbase = Nothing
Set newmail = Nothing
Set txtobj = Nothing
Set mysession = Nothing
Set fjdx = Nothing
End Sub
利用以下模块实现邮件的发送功能
Dim mybiaoti As String '标题
Dim myfj() As Variant
'附件文件名,可发送多个附件
Dim jieshou() As Variant
'邮件接收者,可多个
Dim myzhengwentext As String
Dim mysaveit As Boolean
Dim I, d, w, p, S As Integer
Dim ss As String
Dim myshou() As String
Dim fujian() As String
myshou = Split(Text1.Text, vbCrLf)
fujian = Split(Text4.Text, vbCrLf)
mybiaoti = Trim(Text2.Text)
k = UBound(myshou)
ReDim jieshou(0 To d - 1) '确定有d-1个接收者
For I = 0 To (d - 1)
jieshou(I) = myshou(I)
Next I
p = UBound(fujian)
'获得用户选择的附件个数
c = p
ReDim myfj(0 To p - 1)
For S = 0 To (p - 1)
myfj(S) = fujian(S)
Next S
Call famail(mybiaoti, myfj(), jieshou(), myzhengwentext, mysaveit)
'调用famail函数发送邮件
以上代码经多次验证均能实现将邮件成功发送给指定收件人。
3 结束语
采用VB编程实现将Lotus邮件系统与县级乡镇精细化预报系统进行挂接,既实现了资料的及时上传,同时又充分利用VB实现了界面的简洁美观和Lotus系统的优化,程序运行中只是调用了Lotus的后台处理类,同时不需要每次输入用户名和密码登陆Lotus邮件系统发送邮件 ,大大节省了内存空间,提高了邮件发送速率,进而提高了工作效率。
参考文献:
[1]崔晓阳.用Treeview控件实现树形管理信息系统[J].农业网络信息,2007(01):135-136.
[2]罗琳,陈怡之,陈斌.Notes编程疑难详解[M].北京:人民邮电出版社,2000.
作者简介:钮海全(1960.12-),男,山西人,科长,大气探测工程师。
作者单位:宁夏银川市气象局,银川 750000;宁夏贺兰县气象局,银川 750200