起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1351|回复: 34

【结贴】3002版本中邮件转发附件内容会丢失。**

[复制链接]
发表于 2008-2-26 18:13:33 | 显示全部楼层 |阅读模式
如题,如果转发邮件的话附件还在,但那附件其实就剩个躯壳了,附件名都和原邮件一样,但却都是些空文件,请看看,谢谢。
.                                                                                                                                                                                      .
.                                                                                                                                                                                      .
回复

使用道具 举报

发表于 2008-2-26 21:55:16 | 显示全部楼层
http://bbs.justep.com/forum.php?mod=viewthread&tid=20789
不好意思,应该是老缺陷。 如果不需要多选另存的话。可以这样改。
procedure TMAILEDITFORM.actSaveAsAttachmentExecute(Sender: TObject);
var
  lSaveDialog: TMailSaveDialog;
  mi: TMessageItem;
  lStream: TStream;
  lMailAttachment: TMailAttachment;

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;
回复 支持 反对

使用道具 举报

发表于 2008-2-26 22:10:39 | 显示全部楼层
多选:

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-2-26 22:11:24 | 显示全部楼层
修改的比较大,注意备份代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-26 22:39:04 | 显示全部楼层
不好意思,按照3喽的代码,问题依然没有解决。
.                                                                                                                                                                                            .
.                                                                                                                                                                                            .
回复 支持 反对

使用道具 举报

发表于 2008-2-27 08:42:27 | 显示全部楼层
我问一下,你是在设计环境下运行的吗?还是在运行环境下运行的,
你这样,
先重新编译一下,你修改的所有对象;
然后签入所有你修改的对象
最后刷新缓存

再运行看看。
还有,修改后的结果是啥,只是没有附件?还是没有原邮件内容?还是跟内容和附件都没有呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-27 08:54:41 | 显示全部楼层
在运行环境和设计环境均不行!

修改后现象和一楼的一样,没有变化,有附件,但都是只有文件名和原邮件一致,但大小均为0的文件。
.                                                                                                                                                                                            .
.                                                                                                                                                                                            .
回复 支持 反对

使用道具 举报

发表于 2008-2-27 11:22:09 | 显示全部楼层
楼主,我们测试了一下,结果是转发之后邮件,会导致附件中内容丢失,这是一个缺陷。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-27 12:14:36 | 显示全部楼层
OK,现在我们在现场有没有什么好办法处理这个缺陷呢?
.                                                                                                                                                                                            .
.                                                                                                                                                                                            .
回复 支持 反对

使用道具 举报

发表于 2008-2-27 13:12:49 | 显示全部楼层
目前,我们的开发人员,正在找,预计能找出一个解决方案
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-11 02:14 , Processed in 0.041379 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表