Lotus Notes - 使用 OLE 将邮件保存到文件

Lotus Notes - Save mail to file with OLE

我正在通过 OLE 访问 Lotus Notes,这是我检索所选邮件的方式:

try
 UIView := FLNotes.CURRENTVIEW; // am I in a view or in an opened document ?
 if VarIsClear(UIView) then begin
   try
     aDocument := FLNotes.CURRENTDOCUMENT.Document;

   except
       raise;
   end;
 end else begin  // any selected mails in view ?

   UIDocuments := UIView.DOCUMENTS;

   for counter := 1 to UIDocuments.Count do begin
     if counter = 1 Then
       aDocument := UIDocuments.GETFIRSTDOCUMENT
     else
       aDocument := UIDocuments.GETNEXTDOCUMENT(aDocument);

   end;
 end;
finally
 UIView := Unassigned;
 UIDocuments := Unassigned;
 aDocument := Unassigned;
end;

我在 aDocument 中有对特定邮件的引用。现在我想保存每一封邮件(在磁盘上作为文件,而不是在 Lotus Notes 中),但我没有找到与 OLE 一起使用的正确方法。 我找到了这个 Notes Commands,但我没有弄清楚 OLE 访问的语法是什么。我这样试过:aDocument.Command("FileSave", "Test.eml"),我还尝试了很多其他与 Save 的组合,但其中 none 有效。所以也许有人已经这样做了或者有提示我可以寻找解决方案

谢谢 问候

Notes 中的保存操作会将文档保存在 NSF 文件中,而不是文件系统中。这是您要查找的导出操作。

  • FileSave 命令将当前 open-for-edit 文档保存在 注释 UI 并将其保存到打开它的 NSF 文件中。
  • Save 方法类似地执行 back-end 保存 - 即,它绕过 UI 操作,采用现有 Notes 文档的 in-memmory 表示(不一定Notes 客户端中的当前版本),并将其保存到打开它的 NSF 文件中。

回到导出操作的主题,据我所知,没有支持.eml 文件的导出方法。虽然 Notes 客户端可以保存一个 .eml 文件,如果你从一个视图中拖动一条消息并将它放在你的桌面上,我不相信在任何支持的 Notes APIs 中有任何支持的方法来自动化这个过程。 (理论上,我认为可以使用 Windows API 将适当的事件消息发送到 Notes 客户端,以使其认为用户正在执行 drag-and-drop操作,但这超出了 Whosebug 此处可能解决的范围。)

似乎有一种方法可以将邮件保存为 eml 文件(实际上是您想要的任何文件,但由于 .eml 是我需要的,所以我将使用它)。所以无论如何有人可能需要它的代码:

 try
   oleSession := GetActiveOleObject('Notes.NotesSession');
 except
   oleSession := CreateOleObject('Notes.NotesSession');
 end;

 path := '...Somepath.../Mail.eml';

 oleDB := oleSession.CurrentDatabase;

 oleSession.ConvertMIME := false; 

 oleView := GetSelectedMail; //the code for this is in the first post

 oleDoc := oleView.GetFirstDocument;
 oleDoc.converttomime(1); 

 mime := oleDoc.getmimeentity;

 oleEmailText := oleSession.CreateStream; // create a stream to fill it with the data

 oleEmailText.open(path, 'us-ascii'); 

 mime.GetEntityAsText(oleEmailText); // write inside stream

 oleSession.ConvertMIME := true; // put this flag back to its original state - per default its true - 

请注意,使用此方法保存的邮件中缺少附件。但是因为我将它们分开并保存在另一个文件夹中,所以对我来说这不是什么大问题

此致