我为Lotus编写了一个简单的邮件客户端,并试图加密一条消息。根据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。也许这能给你个提示。
发布于 2012-10-27 03:44:26
最新答案
鉴于在评论中交换的信息..。
您可以尝试将名为"Encrypt“的文本项设置为"1”,而不是使用msg.encrypt()。这是指示Send()方法在发送电子邮件时加密电子邮件的另一种机制。LotusScript/COM/Java中的EncryptOnSend属性实际上只是设置此项的快捷方式。我相信加密仍然发生在客户端,但值得尝试一下,作为一个解决办法。
也就是说,LNMailMessage继承自LNDocument,因此与EncryptOnSend等价的是将msg转换为LNDocument类,然后使用LNDocument::CreateItem创建一个值为"1“的文本项"Encrypt”。
原始答案
我假设您是在一台机器上运行代码,该机器安装了Notes客户端,并配置了ID文件,您希望该文件用于发送方和签名。(仅仅完成安装是不够的,即使这为您提供了所需的所有DLL。您还需要查看客户端的设置。)
我将检查客户端当前位置文档中的邮件文件位置、邮件文件、家庭服务器和(可选)目录服务器设置,并确保它们都已适当设置。
我还将检查您是否可以打开客户端上的邮件文件,并手动发送签名和加密的消息。
如果您的代码正在服务器上运行,则在server文档中的“Basics”选项卡底部有一个“服务器位置信息”部分,您应该检查该部分。
https://stackoverflow.com/questions/13083227
复制相似问题