Outlook:将附件保存到 FTP 服务器

Outlook: save attachments to an FTP Server

在我的应用程序中,我从 Outlook 查阅我的电子邮件。我将它们与附件一起保存到硬盘驱动器。效果不错:

atcments : OLEVariant;   
...
atcments := itemOL.Attachments.Count;
for counter := 1 to atcments do
begin
  attfilename := Copy (('My file ' + itemOL.Attachments.item(counter).FileName), 0, 120);
  itemOL.Attachments.item(counter).SaveAsFile(ExtractFilePath(Application.ExeName) + '\ MyFolder \' + attfilename);
end;

现在,我想使用 Indy 组件将附件保存到 FTP 服务器。连接到 FTP 服务器后,我将最后一行更改为:

IdFTP1.Put (itemOL.Attachments.item(counter).FileName, attfilename);

但它不起作用,文件未保存在 FTP 服务器中。

有没有办法直接将附件保存到FTP服务器,而不是先保存到硬盘再发送到FTP服务器?

没有磁盘文件,TIdFTP 支持上传的唯一其他选项是 TStream,但我看不出有什么办法可以访问每个附件的原始数据以放入流中,所以你将不得不使用磁盘文件。

我发现您的方法存在一个问题,即您的原始代码处理的是绝对路径,但您的非工作代码处理的是相对路径。由于您知道 SaveAsFile() 有效,只需将该工作文件路径保存在可用于 Outlook 和 FTP 的变量中,例如:

atcments : Integer;
att : OleVariant;
attfilename : string;
...
atcments := itemOL.Attachments.Count;
for counter := 1 to atcments do
begin
  att := itemOL.Attachments.item(counter);
  attfilename := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'MyFolder\My file ' + att.FileName;
  att.SaveAsFile(attfilename);
  IdFTP1.Put(attfilename);
end;