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