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

时间:2017-01-29 16:43:51

标签: email save lotus-notes lotus-domino 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的其他组合,但没有一个有效。所以也许有人已经这样做了,或者有一个提示,我可以寻找解决方案

由于 此致

2 个答案:

答案 0 :(得分:0)

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

  • FileSave命令将当前打开的编辑文档保存在 Notes UI并将其保存到打开它的NSF文件中。
  • Save方法类似地执行后端保存 - 即绕过UI操作,获取现有Notes文档的内存表示(不一定是Notes客户端中的当前文档) ,并将其保存到打开它的NSF文件中。

回到导出操作的主题,据我所知,.eml文件没有受支持的导出方法。虽然如果从视图中拖动邮件并将其放在桌面上,Notes客户端可以保存.eml文件,但我不相信任何受支持的Notes API中都有任何受支持的方法可用于自动执行此过程。 (理论上,我想可以使用Windows API将适当的事件消息发送到Notes客户端,以使其认为用户正在执行拖放操作,但是这样做了超出StackOverflow可能解决的范围。)

答案 1 :(得分:0)

似乎有一种方法可以将邮件保存为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 - 

正如旁注所示,使用此方法,保存的邮件中缺少附件。但是因为我将它们分开并保存在另一个文件夹中,对我的案例来说这不是一个大问题

此致