Delphi和RAD Studio 10.3中if语句中的地址访问冲突

时间:2019-01-03 20:07:45

标签: delphi

我正在开发一个用于从gmail.com检索电子邮件的应用程序,但是确实可以,但是当该应用程序要检查邮件的一部分是否为TIdAttachment时,会引发访问冲突:

image

完整代码为:

type
  TForm4 = class(TForm)
    Button1: TButton;
    LbCantMsg: TLabel;
    Pop3: TIdPOP3;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    IdAntiFreeze1: TIdAntiFreeze;
    Mensaje : TIdMessage;
    RchTMessage: TRichEdit;

    procedure Button1Click(Sender: TObject);
    procedure Pop3Status(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure IdSSLIOHandlerSocketOpenSSL1StatusInfo(const AMsg: string);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;
  FileAttached: TIdAttachmentFile;
  dir : String;
  Lista : TStringList;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
var
  ZipName : String;
begin
  GetDir(0,dir);

  if not DirectoryExists(dir + '\RECIBIDO') then
    CreateDir(dir + '\RECIBIDO');

  Pop3.Host := 'pop.gmail.com';
  Pop3.Port := 995;
  Pop3.Username := '********@gmail.com';
  Pop3.Password := '**********';

  try
    Pop3.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Pop3);
    Pop3.Connect;
    Application.ProcessMessages;

    var CantMSJ : Integer := Pop3.CheckMessages;

    if CantMSJ = 0 then
    begin
      LbCantMsg.Visible := True;
      LbCantMsg.Caption := 'No tiene mensajes para descargar';
    end
    else
    begin
      for var i : Integer := 1 to CantMSJ do
      begin
        Mensaje := TIdMessage.Create();
        Pop3.RetrieveHeader(i, Mensaje);
        Pop3.Retrieve(i, Mensaje);
        LbFrom.Caption := Mensaje.From.Address;
        LbFor.Caption := Mensaje.Recipients.EMailAddresses;
        LbSubject.Caption := Mensaje.Subject;

        for var j : Integer := 1 to Pred(Mensaje.MessageParts.Count) do
        begin
          if (Mensaje.MessageParts.Items[j] is TIdAttachment) then
          begin
            FileAttached := TIdAttachmentFile(Mensaje.MessageParts.Items[j]);
            ZipName := dir + '\RECIBIDO\' + FileAttached.FileName;
          end;

          try
            if FileExists(ZipName) then
            begin
              DeleteFile(ZipName)
            end;

            FileAttached.SaveToFile(ZipName);
          except on E: Exception do
            ShowMessage(E.Message);
          end;
        end;

        Mensaje.Destroy;
      end;
    end;

  except
    on E: Exception do RchTMessage.Lines.Add(E.Message);
  end;

  if Pop3.Connected then
    Pop3.Disconnect;

end;

访问冲突位于代码的这一部分:

if (Mensaje.MessageParts.Items[j] is TIdAttachment)

即使一个朋友在Delphi 7中使用了该代码,我也不知道这是怎么回事。

0 个答案:

没有答案