You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Lotus Notes邮件无人工交互自动转发?脚本遇弹窗问题

Lotus Notes 自动转发邮件:关闭转发文档时避免弹窗问题

我已经接近实现Lotus Notes文档转发功能,现有脚本基本可用但还有问题。我知道可以设置MailOptions或SaveOptions,但这些参数对NotesUIDocument无效。移除或添加Call uiForward.Save时,会分别弹出「保存文档」对话框,或是包含「放弃、仅发送、仅保存、取消、保存并发送」选项的对话框。NotesUIDocument似乎不接受参数,我不知道怎么修改它的选项,请问如何让Notes直接关闭或放弃转发的UIDocument?

以下是简化后的测试脚本(仅转发测试文件夹中的首个邮件):

Sub Initialize
    
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim sendTo As String
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim uiDoc As NotesUIDocument
    Dim uiForward As NotesUIDocument
    
    ' 收件人地址
    sendTo$ = "valid@email.address"
    
    ' 获取当前数据库
    Set db = session.CurrentDatabase
    
    ' 获取测试文件夹中的文档列表
    Set view = db.GetView("Test")
    
    ' 获取第一个文档
    Set doc = view.GetFirstDocument
    
    ' 以只读方式在Notes UI中打开邮件
    Set uiDoc = ws.EditDocument(False, doc)
    
    ' 转发邮件,在UI中创建新文档
    uiDoc.Forward
    
    ' 获取新建的转发文档
    Set uiForward = ws.CurrentDocument          
    
    ' 输入收件人地址(逗号分隔)
    uiForward.GoToField "To"
    uiForward.InsertText sendTo          
    
    ' 关闭原文档,此时已无需保留
    uiDoc.Close(True)
    
    ' 发送并关闭转发文档 - 邮件会存入已发送文件夹
    uiForward.Send
    
    ' 保存转发文档
    ' 这会避免保存弹窗,但会触发另一个包含「放弃、仅发送、仅保存、取消、保存并发送」的对话框
    Call uiForward.Save
    
    ' 关闭转发文档
    uiForward.Close(True)
    
End Sub

解决方案

方案1:避开UI操作,直接用后端文档转发(推荐)

通过NotesDocument的后端API创建转发邮件,完全绕过客户端UI的交互逻辑,不会触发任何弹窗,执行效率也更高。

修改后的代码:

Sub Initialize
    
    Dim session As New NotesSession
    Dim sendTo As String
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim forwardDoc As NotesDocument
    
    ' 收件人地址
    sendTo$ = "valid@email.address"
    
    ' 获取当前数据库
    Set db = session.CurrentDatabase
    
    ' 获取测试文件夹中的文档列表
    Set view = db.GetView("Test")
    
    ' 获取第一个文档
    Set doc = view.GetFirstDocument
    
    If Not doc Is Nothing Then
        ' 创建后端转发文档(True参数表示生成转发邮件)
        Set forwardDoc = doc.CreateReplyMessage(True)
        
        ' 设置收件人
        forwardDoc.SendTo = sendTo
        
        ' 可选:自定义转发主题(默认自动添加"FW:"前缀)
        ' forwardDoc.Subject = "FW: " & doc.Subject(0)
        
        ' 发送邮件,False表示不弹出发送确认窗口,自动保存到已发送文件夹
        Call forwardDoc.Send(False)
        
        Set forwardDoc = Nothing
    End If
    
    ' 释放对象
    Set doc = Nothing
    Set view = Nothing
    Set db = Nothing
    Set session = Nothing
    
End Sub

方案2:保留UI操作,通过后端字段控制弹窗

如果必须依赖UI层面的交互(比如需要保留客户端的邮件格式或插件逻辑),可以通过转发文档的后端对象设置控制字段,修改Notes的默认行为:

修改后的代码:

Sub Initialize
    
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim sendTo As String
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim uiDoc As NotesUIDocument
    Dim uiForward As NotesUIDocument
    Dim forwardBackDoc As NotesDocument
    
    ' 收件人地址
    sendTo$ = "valid@email.address"
    
    ' 获取当前数据库
    Set db = session.CurrentDatabase
    
    ' 获取测试文件夹中的文档列表
    Set view = db.GetView("Test")
    
    ' 获取第一个文档
    Set doc = view.GetFirstDocument
    
    ' 以只读方式打开原邮件UI文档
    Set uiDoc = ws.EditDocument(False, doc)
    
    ' 转发邮件
    uiDoc.Forward
    
    ' 获取转发的UI文档
    Set uiForward = ws.CurrentDocument          
    
    ' 获取对应的后端文档对象(关键:必须通过后端文档设置字段)
    Set forwardBackDoc = uiForward.Document
    
    ' 设置SaveOptions为"0":关闭文档时不保存,也不弹出提示
    forwardBackDoc.SaveOptions = "0"
    
    ' 设置MailOptions为"1":发送后不保留草稿
    forwardBackDoc.MailOptions = "1"
    
    ' 输入收件人
    uiForward.GoToField "To"
    uiForward.InsertText sendTo          
    
    ' 关闭原文档
    uiDoc.Close(True)
    
    ' 发送邮件
    uiForward.Send
    
    ' 直接关闭转发文档,此时不会触发弹窗
    uiForward.Close(True)
    
    ' 释放对象
    Set forwardBackDoc = Nothing
    Set uiForward = Nothing
    Set uiDoc = Nothing
    Set doc = Nothing
    Set view = Nothing
    Set db = Nothing
    Set session = Nothing
    
End Sub

核心说明

  • SaveOptions字段设为"0":告知Notes客户端,关闭文档时无需保存,也不需要弹出确认对话框
  • MailOptions字段设为"1":指定邮件发送后不保留草稿版本
  • 这些字段必须通过uiForward.Document获取的后端NotesDocument对象设置,直接对NotesUIDocument操作无效

内容的提问来源于stack exchange,提问作者DashQuark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:57:17