在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字。另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址。而正常情况下,发送邮件的脚本如果是在客户端运行,发件人就是当前用户;如果是在服务器上运行,发件人则为代码的签名者;并且邮件都是被回复到显示的发件人地址。如果同时邮件是由服务器上的定时代理发出的,我们可以使用想显示的发件人的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()

Lotus Notes中编程发送邮件(二)的更多相关文章

  1. 46. Lotus Notes中编程发送邮件(一)

    邮件是Lotus Notes体系的核心和基本功能,以至于Send()是NotesDocument的一个方法,任何一个文档都可以被发送出去,Notes里的一封邮件也只是一个有一些特殊字段的文档.在程序开 ...

  2. Lotus开发之Lotus Notes中域的验证

    一:介绍       Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等.Lotus中域的验证方式有很多种公式,lotusscript,javascript等 ...

  3. C# 使用 Lotus notes 公共邮箱发送邮件

    公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...

  4. Lotus Notes 学习笔记

    这是一个学习关于如何使用Lotus Notes的Agent功能来实现自动化办公的学习笔记. 一. 介绍 Lotus Notes/Domino 是一个世界领先的企业级通讯.协同工作及Internet/I ...

  5. 52. 模版和设计元素——Lotus Notes的代码重用

    不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...

  6. C# Windows Service调用IBM Lotus Notes发送邮件

    近日研究了下IBM Lotus Mail,这货果然是麻烦,由于公司策略,没有开放smtp,很多系统邮件都没有办法发送,于是入手google学习Lotus Mail,想做成Windows服务,提供wcf ...

  7. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...

  8. 55. 略谈Lotus Notes的与众不同及系列文章至此的总结

    在二十多年的悠久历史里,Lotus Notes发展出一整套独特的概念.技术和思维.由于它早期惊人的领先时代和后续发展中同样惊人的忠于传统,这位软件领域的寿星在如今发展更新速度远超往日和技术愈趋公开互通 ...

  9. shell编程(二)

    第三十二次课 shell编程(二) 目录 十五.shell中的函数 十六.shell中的数组 十七.告警系统需求分析 十八.告警系统主脚本 十九.告警系统配置文件 二十.告警系统监控项目 二十一.告警 ...

随机推荐

  1. nginx搭建流媒体服务器的方法详解

      一.FLV视频发布方式简介 FLV视频有两总发布方式 1.  HTTP方式 这种方式要下载FLV视频文件到本地播放,一旦FLV视频文件下载完成,就不会消耗服务器的资源和带宽,但是拖动功能没有RTM ...

  2. Oracle中的for语句

    for语句是一个可预置循环次数的循环控制语句,他是一个循环计数器,通常是一个整形变量,通过这个循环计数器来控制循环执行的次数 语法如下: for variable_counter_name in [e ...

  3. wrk 网站压力测试

    下载安装 wrk [root@aikaiyuan ~]# git clone https://github.com/wg/wrk.gitInitialized empty Git repository ...

  4. iOS开发 适配iOS10以及Xcode8-b

    现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...

  5. 谈谈Android系统启动时的那点事儿

    Android系统完整的启动过程,从系统层次角度可分为Linux系统层.Android系统服务层.Zygote进程模型三个阶段:从开机到启动Home Launcher完成具体的任务细节可分为七个步骤, ...

  6. 【BZOJ】【1934】【SHOI 2007】Vote 善意的投票

    网络流/最小割 简单题= =直接利用最小割的性质: 割掉这些边后,将所有点分成了两部分(两个连通块),我们可以假定与S相连的是投赞成票,与T相连的是投反对票. 那么如果一个小朋友原本意愿是睡觉,那么连 ...

  7. 剑指offer--面试题13

    题目:以O(1)的时间复杂度删除单链表中的某个节点 自己所写代码如下: //以O(1)时间删除链表节点 //要求:单向链表,头指针,待删节点指针 //链表节点 struct ListNode { in ...

  8. NS记录

    NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析. 1名词简介 您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的 ...

  9. sql server2012 动态端口

    我们查询  exec sp_readerrorlog 0, 1, "listening" 时可以看有端口监听,有1433 1434 53698等. 这时我们可以打看配置管理器,查看 ...

  10. Properties --- C++读配置信息的类(一)

    http://blog.csdn.net/billow_zhang/article/details/4304980 在开发实践中,积累了一些通用的C++ 类库,在此写出来给大家分享.也希望能给出更好的 ...