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;
在我的应用程序中,我从 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;