我通过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
的其他组合,但没有一个有效。所以也许有人已经这样做了,或者有一个提示,我可以寻找解决方案
由于 此致
答案 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 -
正如旁注所示,使用此方法,保存的邮件中缺少附件。但是因为我将它们分开并保存在另一个文件夹中,对我的案例来说这不是一个大问题
此致