在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字。另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址。而正常情况下,发送邮件的脚本如果是在客户端运行,发件人就是当前用户;如果是在服务器上运行,发件人则为代码的签名者;并且邮件都是被回复到显示的发件人地址。如果同时邮件是由服务器上的定时代理发出的,我们可以使用想显示的发件人的ID签名代理,甚至单为此用途先创建一个ID。或者也可以在代理的属性的安全选项页里设置以其他用户的身份运行(Run
on behalf of),这样做有一定的权限上的要求,Notes帮助文档里有详细说明。
不过可以想见的最方便的方法还是在代码里指定发件人,“伪造”签名。这样做只是为了显示上的方便,并没有破坏Notes严格的身份安全,收到的邮件在收件人栏还是会有“甲替乙发送”这样的备注,但是已经满足了我们对通知邮件的发件人的要求。
笔者记不清在曾经某个版本的Notes中,只需给要发送的邮件文档添加一个From字段,就可以修改发件人。在最近的版本里,这是行不通的,下面的方法却一直可行。
这个邮件自定义类,实现的功能和46.Lotus Notes中编程发送邮件(一)里的代码一样,就是发送一封普通邮件,除了可以指定要显示的发件人或另外的回复地址。方法是分别指定Principal或ReplyTo字段,除了一般的邮件地址,还必须包含该地址对应的用户的Domino域。因为大部分情况下,这些用户和当前用户都是同属一个Domino域的,为了简便,在GetDomain()方法里取的就是当前用户的Domino域。最后一个CopyItem()方法只是为了方便给邮件添加一些内容。
Public Class Mail
Private s As NotesSession
Private mailDoc As NotesDocument
Private domain As String 'Notes domain
Public SendTo As Variant
Public Subject As String
Public Body As String
Public LinkDoc As NotesDocument
Public CopyTo As Variant
Public BlindCopyTo As Variant
Public ReplyTo As String
Public Principal As String
Sub New(sendTo As Variant, subject As String, body As String)
Me.SendTo=sendTo
Me.Subject=subject
Me.Body=body
Me.CopyTo=""
Me.BlindCopyTo=""
Set Me.LinkDoc=Nothing
Set s=New NotesSession
Dim db As NotesDatabase
Set db=s.CurrentDatabase
Set mailDoc = New NotesDocument(db)
End Sub
Private Function GetDomain()
If Me.domain><"" Then
Exit Function
End If
Dim nd As NotesDirectory
Set nd=s.Getdirectory(s.Currentdatabase.Server)
Dim info As Variant
info=nd.Getmailinfo(s.Effectiveusername)
Me.domain=info(5)
End Function
Public Function Send()
With mailDoc
Call .ReplaceItemValue("Form", "memo")
Call .ReplaceItemValue("SendTo",sendto)
Call .ReplaceItemValue("CopyTo", CopyTo)
Call .ReplaceItemValue("BlindCopyTo", BlindCopyTo)
Call .ReplaceItemValue("Subject",subject)
End With
Dim rtItem As New NotesRichTextItem(mailDoc,"Body")
Call rtItem.AppendText(body)
If Not linkdoc Is Nothing Then
Call rtItem.AppendDocLink(linkdoc,"click the link")
End If
' Format should equal: "From User" <fromuser@xyz.com@DOMAIN>
If Me.ReplyTo><"" Then
Call Me.GetDomain()
mailDoc.ReplyTo=Me.ReplyTo & "@" & Me.domain
End If
If Me.Principal><"" Then
Call Me.GetDomain()
maildoc.Principal =Me.Principal & "@" & Me.domain
End If
Call mailDoc.Send(False)
Dim msg As String
If IsArray(sendto) Then
msg=Join(sendto)
Else
msg=sendto
End If
Print "sent mail to " & msg
End Function
Public Function CopyItem(item As NotesItem, itemName As String )
Call mailDoc.Copyitem(item, itemName)
End Function
End Class
调用起来很简单:
Dim mail As New Mail(sendTo, subject, body)
Dim replyTo As String
replyTo=”John Henry”
mail.Principal=replyTo
mail.ReplyTo=replyTo
Call mail.Send()
分享到:
相关推荐
Packtpub.IBM.Lotus.Notes.and.Domino.8.5.1.Jan.2010.rar
如何设置Lotus Notes收发Internet邮件
Lotus Notes编程技巧.chm//////
LOTUS NOTES公式归类,lotus编程资料,经过整理后,将LOTUS常用编程公式汇总
可以在Notes数据库中发送SMTP的邮件,从别的网站找到的
本书全面介绍了Lotus Notes R5中文版的操作和使用。共分24学时进行讲解,是自学和...在Lotus Notes R5的客户端中搜索和保存;管理日历项和任务;使用群组日历和安排计划;复制数据库;操作附件;自定义Notes客户端。
lotus.domino.* Notes.jar
lotus.domino资源包,lotus发送邮件
利用VB操作LotusNotes数据库发送邮件
asp.net调用lotusnotes收发邮件实例
Lotus Notes 8 客户端不仅拥有全新的世界级用户界面和众多加强的邮件、日历、联系人功能,还内置了一套基于开放标准的,集文字处理、电子表格和幻灯片为一体的日常办公软件,同时 Lotus Notes 8 本身还是一个基于 ...
Lotus notes 新邮件监控,发送邮件标题到手机上,每五分钟监测一次
学习domino编程的好书. 建议下载.
十分钟让你自学Lotus Notes 7英文名称Teach.Yourself.Lotus.Notes.7.in.10.Minutes
Lotus Notes Domino 的C API 编程
莲花邮件系统 lotus notes 基本的问题的解决思路。
自己学习使用VBA来通过Lotus Notes发邮件的学习笔记
10.3 关于lotus.domino软件包 259 10.4 例子:Corba Text 1.java 260 10.5 例子:ResumeApplet.java 264 10.6 显示数据图表:SalesChartApplet.java 270 10.7 使用两种方式发送数据: AgentControlPanel.java 274 ...
使用Lotus Notes连接Exchange 2003收发邮件