如何捕获"发送邮件"在IBM Lotus Notes的插件中

时间:2013-04-18 11:43:56

标签: java eclipse-plugin lotus-notes lotus-domino

以下是我要做的事情: 添加一个特殊按钮以将文件附加到Notes“新消息”窗口。如果使用此按钮附加文件,则在发送电子邮件时,应将其上传到服务器并将其链接添加到电子邮件中。

我的问题 - 是否有可能(以及如何)在Lotus Notus的插件中捕获“发送邮件”事件?

2 个答案:

答案 0 :(得分:0)

我不知道Eclipse插件会如何做到这一点。此外,由于Notes可以脱机使用 - 当无法将文件上传到服务器时 - 最好让Domino服务器上运行的代码拦截邮件消息并执行上传。

在服务器上挂钩邮件操作的大多数产品使用Lotus Notes C API的Extension Manager函数来挂接EM_NSFNOTEUPDATE事件的EM_BEFORE通知,并检查NSFNoteUpdate操作是否发生在服务器的mail.box文件中,然后检查是否该消息需要特殊处理(即,在您的情况下,通过查找您的按钮代码已插入到消息中的特殊NotesItem)。通常的编码方法是立即更改消息的状态以使其保持不变,从而防止Domino路由器在代码仍在处理时尝试发送消息。许多产品实际上有两个组件 - EM钩子DLL和一个单独的服务器任务,它从钩子DLL接收信号,处理消息,然后从保持状态释放它。这种方法可以防止代码在处理大文件时占用路由器线程。

(注意:较新版本的Domino服务器能够使用用Java编写的OSGI插件,而不是使用Notes C API进行此类操作。我没有查看这可能如何用于操作的详细信息处理邮件消息。)

答案 1 :(得分:0)

我有点想通了。 8.5中提供了一个非常好的扩展点 - “com.ibm.notes.mailsend.MailSendAttachmentsDialog”,它专门用于附件的自定义处理。您可以在plugin.xml中的IBM \ Lotus \ Notes \ framework \ shared \ eclipse \ plugins \ com.ibm.notes.mailsend_8.5。 * .jar中看到它。

唯一的问题是 - 它只处理附件而且无法访问任何其他内容。因此,如果有人想出如何从那里获取主题行和消息文本,请回复。

更新:得到它。

NotesUIElement elem = (new NotesUIWorkspace()).getCurrentElement();
if (elem instanceof NotesUIDocument) {
NotesUIDocument doc = ((NotesUIDocument) elem);
String to = doc.getField("EnterSendTo").getText();
String cc = doc.getField("EnterCopyTo").getText();
String bcc = doc.getField("EnterBlindCopyTo").getText();
String subject = doc.getField("Subject").getText();
String body = doc.getField("Body").getText();
    ....
 }