我为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。也许这会给出一个提示。
答案 0 :(得分: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。您还需要完成客户端设置。)
我会检查客户端当前位置文档中的邮件文件位置,邮件文件,主服务器和(可选)目录服务器设置,并确保它们都已正确设置。
我还会检查您是否可以在客户端上打开邮件文件并手动发送已签名和加密的邮件。
如果您的代码在服务器上运行,则应检查“服务器文档”中“基本”选项卡底部的“服务器位置信息”部分。