如何使用Indy 10和Delphi 7接收带有文件附件的电子邮件?

5
如何使用indy 10和delphi 7接收带有文件附件的电子邮件?

1
你是否正在使用Indy组件从POP3服务器读取电子邮件,并且在阅读附件方面遇到了问题?我问这个问题是因为,否则一个完全有效的答案是“Indy与此无关,请让某人向您发送一些电子邮件”。如果是这样,那么你已经做了什么?编辑你的问题并展示一些代码。 - Cosmin Prund
3个回答

5

这是可用的Indy 10代码。“Files”是一个字符串列表,其中包含已下载的附件列表 - 我只对附件本身感兴趣,而不是信件本身。

with IdPop31 do
begin
  ConnectTimeout := 5000;
  Connect;
  try
    files.Clear;
    for i := 1 to checkmessages do
    begin
      msg.clear;
      flag := false;
      if retrieve (i, msg) then
      begin
        for j := 0 to msg.MessageParts.Count-1 do
        begin
          if msg.MessageParts[j] is TIdAttachment then
          begin
            with TIdAttachment(msg.MessageParts[j]) do
            begin
              s := IncludeTrailingPathDelimiter(mydir) + ExtractFileName(FileName);
              log ('Downloaded ' + s);
              if not FileExists(s) then
              begin
                SaveToFile(s);
                files.Add(s);
              end;
             end;
            end;
            flag := true;
          end;
        end;
      end;
      if flag then Delete(i);  // remove the email from the server
    end;
  finally
    Disconnect;
  end
end;

4

附件被存储为TIdAttachment对象,位于TIdMessage.MessageParts集合中。


请问您能否提供完整的代码,以便我可以获取邮件和附件文件,或者任何可行或经过测试的示例,这将非常有帮助。先感谢您了。 - kapil sharma
Kapil - 这里的人们希望你尝试一些东西,然后告诉我们你遇到了什么困难。你听起来有点懒。 - Warren P

0
您的代码运行良好,但是在“begin-end”部分需要纠正“s”定义的问题。如果“FileName”为空,则程序必须跳过保存。可能是您切掉了这一行,“end”就挂起了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接