我正在开发一个用于从gmail.com检索电子邮件的应用程序,但是确实可以,但是当该应用程序要检查邮件的一部分是否为TIdAttachment
时,会引发访问冲突:>
完整代码为:
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中使用了该代码,我也不知道这是怎么回事。