修改的比较多,楼主备份下以前的代码哦
procedure TMAILEDITFORM.actSaveAsAttachmentExecute(Sender: TObject);
var
lSaveDialog: TMailSaveDialog;
mi: TMessageItem;
lStream: TStream;
i:integer;
tmpFileName,dir:string;
lMailAttachment: TMailAttachment;
begin
if lvwAttachments.SelCount=1 then
begin
mi := lvwAttachments.Selected.Data as TMessageItem;
lSaveDialog := TMailSaveDialog.Create(Self);
try
lSaveDialog.Filter := '所有文件(*.*)|*.*';
lSaveDialog.Options := lSaveDialog.Options + [TOpenOption.ofOverwritePrompt];
if mi.FileName = '' then
lSaveDialog.FileName := mi.ContentName
else
lSaveDialog.FileName := mi.FileName;
if lSaveDialog.Execute then
begin
lMailAttachment := TMailAttachment.Create;
lStream := TFileStream.Create(lSaveDialog.FileName, Classes.fmCreate);
try
mi.GetContent(lStream);
if (mi.AttachmentIndex > 0) and (lStream.Size = 0) then
begin
lMailAttachment.Index := mi.AttachmentIndex;
MailSystem.LoadMailAttachment(MailGUID, lMailAttachment);
lMailAttachment.Content.Position := 0;
lStream.CopyFrom(lMailAttachment.Content, lMailAttachment.Content.Size);
end
finally
lStream.Free;
end;
end;
BringWindowToTop(Handle);
finally
lSaveDialog.Free;
end;
end
else begin
if Business.Forms.FileCtrl.SelectDirectory('选择目录', '',dir) then
begin
// lSaveDialog := TMailSaveDialog.Create(Self);
for i:=0 to lvwAttachments.Items.Count-1 do
begin
if lvwAttachments.Items.Selected then
begin
mi := lvwAttachments.Items.Data as TMessageItem;
if mi.FileName = '' then
tmpFileName:=mi.ContentName
else
tmpFileName:=mi.FileName;
tmpFileName:=dir+'\'+tmpFileName;
if sysutils.FileExists(tmpFileName) then
begin
if Forms.Application.MessageBox(tmpFileName+#13'文件已经存在是否覆盖?','提示',Borland.Delphi.Windows.MB_ICONWARNING+Borland.Delphi.Windows.MB_OkCancel)=Borland.Delphi.Windows.idok then
sysutils.DeleteFile(tmpFileName)
else
continue;
end;
lMailAttachment := TMailAttachment.Create;
lStream := TFileStream.Create(tmpFileName, Classes.fmCreate);
try
mi.GetContent(lStream);
if (mi.AttachmentIndex > 0) and (lStream.Size = 0) then
begin
lMailAttachment.Index := mi.AttachmentIndex;
MailSystem.LoadMailAttachment(MailGUID, lMailAttachment);
lMailAttachment.Content.Position := 0;
lStream.CopyFrom(lMailAttachment.Content, lMailAttachment.Content.Size);
end
finally
lStream.Free;
end;
end;
end;
BringWindowToTop(Handle);
end;
end;
end;
//2008年最新修改的哦! |