我已经为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提出任何建议。也许这给出了提示。
最佳答案
更新的答案
鉴于评论中交换的信息...
您可以尝试将名为“ Encrypt”的文本项设置为值“ 1”,而不是使用msg.encrypt()。这是一种替代机制,用于指示Send()方法在发送电子邮件时对其进行加密。 Notes的LotusScript / COM / Java API中的EncryptOnSend属性实际上只是设置此项目的快捷方式。我相信加密仍在客户端进行,但是值得尝试作为解决方法。
也就是说,LNMailMessage继承自LNDocument,因此,EncryptOnSend的等效项是将msg转换为LNDocument类,然后使用LNDocument :: CreateItem创建名为“ Encrypt”的值为“ 1”的文本项。
原始答案
我假设您正在安装了Notes客户端并配置了ID文件的计算机上运行代码,该ID文件用于发件人和签名。 (仅完成安装是不够的,即使这样可以为您提供所需的所有DLL。您还需要进行客户端设置。)
我将检查客户端当前位置文档中的“邮件文件位置”,“邮件文件”,“主服务器”和(可选)“目录服务器”设置,并确保所有设置均正确。
我还将检查您是否可以在客户端上打开邮件文件并手动发送签名和加密的邮件。
如果您的代码在服务器上运行,则应检查“服务器文档”中“基本”选项卡底部的“服务器位置信息”部分。