【问题标题】:Outlook: save attachments to an FTP ServerOutlook:将附件保存到 FTP 服务器
【发布时间】:2021-03-15 16:22:56
【问题描述】:

在我的应用程序中,我查阅了来自 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,但我明白了无法访问每个附件的原始数据以放入流中,因此您必须使用磁盘文件。
  • 谢谢雷米。运行时我收到一条错误消息,提示无法打开路径 xxxx 中的文件。我会听从你的建议:浏览磁盘文件,然后将它们发送到 FTP 服务器。唯一的问题是:如果附件很大,在FTP服务器上保存这个文件需要很长时间。我别无选择,所以我将使用磁盘文件。
  • 报错信息:“xx项目引发异常类”EFOpenError”,提示“无法打开文件:”D:\My file.pdf“找不到指定文件”
  • 嗯,这应该告诉你你没有正确使用文件路径,所以我建议你仔细检查你的输入和逻辑。您提供给IdFTP1.Put() 的文件路径错误。
  • 是的,你给IdFTP1.Put ()的文件路径不正确。无法直接从 Outlook 获取原始数据(附加文件)。

标签: delphi outlook ftp


【解决方案1】:

如果没有磁盘文件,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;

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2018-10-04
    相关资源
    最近更新 更多