将Delphi Indy v9代码转换为v10

时间:2012-07-03 13:53:10

标签: delphi email indy10

我在使用下面的StoredPathName代码时遇到问题。由于Indy 10不使用StoredPathName,我不知道如何更改此代码以从V9调整到V10。下面的代码不是由我编写的,当涉及到这种类型的代码时,我仍然是一个新手,所以我很欣赏一个代码示例,展示如何在可能的情况下纠正问题。

vlist:TStringList;

...
for j:=numEmails downto 1 do
  begin
    Msg.Clear;
    Retrieve(j,Msg);

    for k:=0 to Msg.MessageParts.Count-1 do
      with Msg.MessageParts[k] do
        if Msg.messageParts[k] is TIdAttachmentFile then
          begin
            //Get the name of the file that was sent.
            aname := TIdAttachmentFile(Msg.MessageParts[k]).FileName;

            if SameText(aname,ExtractFilename(PacketFilename))
            and FileExists(Longfilename(StoredPathName)) then
              begin
                //Read attachment and do call-back if defined.
                vlist.LoadfromFile(LongFilename(StoredPathName));

                if assigned(OnReceive) then
                  OnReceive;
              end
          end;
  end;

Disconnect;

except
  on E:Exception do
    result := E.Message;
end;

还有一点代码是...... Connect(9000); 由于9000不是允许的参数,我只是将其更改为Connect;那可以吗?

1 个答案:

答案 0 :(得分:1)

StoredPathName是从TIdMessagePart移至TIdAttachmentFile的属性。如果您更改代码以在顶部执行类型转换,则它应该都可以正常工作。

改变这个:

  with Msg.MessageParts[k] do
    if Msg.messageParts[k] is TIdAttachmentFile then

为:

  if Msg.messageParts[k] is TIdAttachmentFile then
    with TIdAttachmentFile(Msg.MessageParts[k]) do