【问题标题】:How to send lotusscript in an email programmatically?如何以编程方式在电子邮件中发送 lotusscript?
【发布时间】:2013-01-28 22:22:59
【问题描述】:

我正在尝试从 Web 应用程序 (Java EE) 以编程方式生成 lotusscript(以可编写脚本按钮的形式)并将其发送给最终用户,最终用户将在他/她的 Lotus Notes 客户端中运行它。

我怎样才能做到这一点?我是否可以使用 API 将 lotusscript 嵌入到电子邮件中?

【问题讨论】:

  • 只有当邮件将通过 Domino 服务器发送时,您才能执行此操作。如果它通过任何互联网服务器,它将删除所有特定于莲花的东西。 F.e.您的应用程序可能会连接到 Domino 服务器上的数据库,创建邮件并发送它。
  • @pstr 除非您使用我的解决方案 - 发送 URL 供用户点击。
  • @DavidNavarre 您描述了一种“连接到 Domino 服务器上的数据库,创建邮件并发送它”的方法。
  • @pstr 啊,你是对的。我描述了如何解决在 Java EE 中生成的电子邮件中执行 LotusScript 代码的潜在问题 - 不包括电子邮件中的代码。

标签: java lotus-notes lotusscript


【解决方案1】:

与其尝试嵌入按钮,我会考虑利用 Notes 的“在文档中存储表单”功能。

也就是说,我会使用 Domino Designer 手动创建一个数据库(为方便起见,我将其称为“MyDb.nsf”)。在此数据库中创建一个表单(为方便起见,“MyForm”)并使用电子邮件消息的必填字段(SendTo、主题、正文等)对其进行设置。然后在表单上创建一个按钮并输入 LotusScript 代码。

通过提前完成此操作,您的代码可以利用 Document.send() 方法中的可选 attachForm 参数。

您要做的是以通常的方式打开 MyDb.nsf,然后使用 Database.createDocument() 在该数据库中创建您的文档,然后使用 Document.ReplaceItemValue("Form","MyForm") 将此文档绑定到您的表单。还可以根据需要设置其他项目(例如,主题、发送到、正文),并在您完成后致电Document.send(true)。这会将您的表单嵌入到文档中并发送,因此 LotusScript 代码将在随消息一起发送的嵌入表单中传播。

我认为这可能是最适合您的方法,因为我认为这将在嵌入表单时保留表单上的签名。我不确定,但另一方面,我更确定使用 CORBA/IIOP 发送的任何其他方式都会为您提供未签名的脚本(因为 CORBA/IIOP 无法访问签名所需的私钥文件)。未签名的脚本意味着您的用户在执行它时会收到 ECL 警告,这可能会导致他们在 ECL 中添加一个条目以允许未签名的脚本,这是一种糟糕的安全做法。

【讨论】:

  • 谢谢理查德,但是我需要自动化流程,所以我认为我无法使用这种方法。
  • @ClarenceCai 这也可以自动化。这与我的建议基本相同,没有额外的修改 LotusScript 的步骤。
  • @PanuHaaramo 我明白了。我也会检查一下。抱歉,Richard,我是 Lotus 套件开发的新手。
  • 是的,假设您不是每次都自定义生成 LotusScript,您可以在创建数据库、表单和按钮一次之后轻松地自动执行此过程。老实说,我不建议为每个用户或您需要发送的每封电子邮件生成定制的 LotusScript。相反,我建议编写一个脚本,从表单中读取隐藏字段来控制它的作用。然后,当您生成要通过电子邮件发送的新消息时,您的“自定义”将只是设置隐藏项目中的值。
  • 请注意,如果文档发送到外部电子邮件地址,“文档中的存储形式”将需要设置 X.509,否则您将收到加密错误。外部接收用户将需要您的公共签名的副本,并且还必须允许它执行代码(假设他们正在使用 Notes)。
【解决方案2】:

这是一个想法。我还没有尝试过,也不确定它是否会起作用:

  1. 在 Domino Designer 中使用 LotusScript 按钮创建表单并设置为存储在文档中
  2. 使用该表单创建文档
  3. 将文档导出为 DXL (Domino XML)
  4. 在您的 Java EE 应用程序中使用 ncso.jar 来导入 DXL(您可以根据需要先修改 XML 中的 LotusScript)
  5. 使用Document.send() 通过电子邮件发送文档。当使用 CORBA/IIOP 连接到 Domino 服务器时,我认为这应该可以工作。

更新

您也许可以跳过 DXL 部分,只修改文档项中的 LotusScript。我知道您必须为每个收件人修改 LotusScript。如果不是,那么一切都会容易得多(见理查兹的回答)。

【讨论】:

  • 谢谢 Panu,我正在研究您的解决方案,Richard 提到通过 CORBA/IIOP 发送它会有一个未签名的问题。是否可以对其进行签名,以便用户不会对此有任何问题?我需要什么来签名?
  • 我认为它会由您使用的用户名签名。然后它取决于 Notes 客户端 ECL 设置,当在其 Notes 客户端中运行代码时,该用户名可以做什么。
【解决方案3】:

另一种选择是在 QueryOpen 中嵌入 URL 以使用您的代码(或对代理的调用)打开页面设计元素,以便在页面打开时运行。

Notes://myserver.mycompany.com/utilities.nsf/MyTaskLauncher?OpenPage

我不确定它是否可以传递参数值,或者您是否必须依靠用户的凭据来确定正确的信息。

优点:

  1. 代码位于一个位置,所以如果我发现那里我可以更新它 是原始版本中的一个错误。
  2. 使用存储表单对用户的邮件文件进行最少的操作。
  3. 较小的电子邮件信息,因为我不必发送表单 信息。
  4. 在 Java EE 中构建简单的字符串比使用更强大的 解决方案。
  5. 代理可以使用签名 ID 或使用用户的 凭据。
  6. 只要收件人有 Notes 客户端,就可以发送到任何电子邮件地址。

【讨论】:

  • 这给了我“当前未实施的操作”。您可以使用 Notes URL 运行代理吗?
  • @PanuHaaramo 哎呀!我以为它可以在 Notes 中使用,因为它可以在 Web 上使用。我把答案改成“放在页面设计元素的QueryOpen中”。
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多