0

我为 Lotus Notes 编写了一个简单的邮件客户端,并尝试加密消息。根据 C++ API 帮助,我的方法如下:

LNMailMessage msg;
session.CreateMailMessage(&msg);     // Create new message
msg.Open();                          // Open message for editing

msg.SetRecipients(<myself>);         // Set recipients
msg.SetSubject("Encryption test");   // Set subject

if (msg.HasItem("Body"))             // Delete default body
    msg.DeleteItem("Body");

LNText body;                         // Create encrypted body field
body.SetValue("Encrypted text");
msg.CreateItem("Body", body, LNITEMFLAGS_ENCRYPT);

msg.Encrypt();                       // Encrypt message
msg.Send();                          // Send message

现在我有一个问题,Encrypt() 方法抛出一个异常,由于未打开的数据库,消息无法加密:

由于未打开的数据库无法执行操作

当我尝试签署消息时,会出现相同的错误消息。有谁知道,我做错了什么?是指哪个数据库?欢迎提出任何建议,包括 C API。也许这给出了一个提示。

4

1 回答 1

1

更新的答案

鉴于评论中交换的信息...

您可以尝试将名为“Encrypt”的文本项设置为值“1”,而不是使用 msg.encrypt()。这是一种替代机制,用于指示 Send() 方法在发送电子邮件时对其进行加密。LotusScript/COM/Java API for Notes 中的 EncryptOnSend 属性实际上只是设置此项的快捷方式。我相信加密仍然发生在客户端,但值得尝试将其作为一种解决方法。

即,LNMailMessage 继承自 LNDocument,因此 EncryptOnSend 的等价物是将 msg 转换为 LNDocument 类,然后使用 LNDocument::CreateItem 创建一个名为“Encrypt”且值为“1”的文本项。

原始答案

我假设您在安装了 Notes 客户端并配置了您希望用于发送者和签名的 ID 文件的机器上运行代码。(仅仅完成安装是不够的,即使它为您提供了所需的所有 DLL。您还需要完成客户端设置。)

我会检查客户端当前位置文档中的邮件文件位置、邮件文件、主服务器和(可选)目录服务器设置,并确保它们都设置正确。

我还会检查您是否可以在客户端上打开邮件文件并手动发送签名和加密的消息。

如果您的代码在服务器上运行,您应该检查服务器文档中“基本”选项卡底部的“服务器位置信息”部分。

于 2012-10-27T03:44:26.890 回答