ufrmAttchMgr.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:9k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit ufrmAttchMgr;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, cxCustomData, cxGraphics, 
  6.   cxDataStorage, cxEdit, DB, cxDBData, dxBar, cxGridLevel, cxClasses,
  7.   cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView,
  8.   cxGridDBTableView, cxGrid, cxContainer, ExtCtrls,
  9.   dxBarExtItems, ADODB, ComCtrls, cxTreeView,uMyXml, cxStyles, cxFilter,
  10.   cxData, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel,
  11.   dxSkinCoffee, {dxSkinDarkRoom,} dxSkinDarkSide, {dxSkinFoggy,}
  12.   dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky,
  13.   dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins,
  14.   dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
  15.   dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinPumpkin, {dxSkinSeven,}
  16.   {dxSkinSharp,} dxSkinSilver, {dxSkinSpringTime,} dxSkinStardust,
  17.   dxSkinSummer2008, dxSkinsDefaultPainters, dxSkinValentine,
  18.   dxSkinXmas2008Blue, dxSkinscxPCPainter, dxSkinsdxBarPainter;
  19. type
  20.   TfrmAttchMgr = class(TForm)
  21.     pnl1: TPanel;
  22.     cxgrdlvlGrid1Level1: TcxGridLevel;
  23.     cxGrid1: TcxGrid;
  24.     dxbrmngr1: TdxBarManager;
  25.     dxbrBar: TdxBar;
  26.     lbl1: TdxBarStatic;
  27.     dxbrdt1: TdxBarEdit;
  28.     dxbrbtn1: TdxBarButton;
  29.     dxbrbtn2: TdxBarButton;
  30.     lbl2: TdxBarStatic;
  31.     tvAttchs: TcxGridTableView;
  32.     tvGrid1TableView2: TcxGridTableView;
  33.     ds1: TDataSource;
  34.     con1: TADOConnection;
  35.     qry1: TADOQuery;
  36.     tvEMail: TcxTreeView;
  37.     gtvColName: TcxGridColumn;
  38.     gtvColInEmail: TcxGridColumn;
  39.     gtvColSize: TcxGridColumn;
  40.     gtvColDate: TcxGridColumn;
  41.     gtvColSender: TcxGridColumn;
  42.     gtvColFuulPath: TcxGridColumn;
  43.     gtvColEmailPath: TcxGridColumn;
  44.     pm1: TdxBarPopupMenu;
  45.     dxbrbtn3: TdxBarButton;
  46.     dxbrbtn4: TdxBarButton;
  47.     dxbrbtn5: TdxBarButton;
  48.     dxbrbtn6: TdxBarButton;
  49.     dlgSave: TSaveDialog;
  50.     lbl3: TdxBarStatic;
  51.     btnOpnDir: TdxBarButton;
  52.     gtvColEMailAddr: TcxGridColumn;
  53.     procedure FormCreate(Sender: TObject);
  54.     procedure tvEMailClick(Sender: TObject);
  55.     procedure FormDestroy(Sender: TObject);
  56.     procedure dxbrbtn3Click(Sender: TObject);
  57.     procedure dxbrbtn6Click(Sender: TObject);
  58.     procedure dxbrbtn5Click(Sender: TObject);
  59.     procedure FormResize(Sender: TObject);
  60.     procedure btnOpnDirClick(Sender: TObject);
  61.     procedure dxbrbtn4Click(Sender: TObject);
  62.     procedure tvEMailDeletion(Sender: TObject; Node: TTreeNode);
  63.   private
  64.     { Private declarations }
  65.     FSelectedEmailAddr:String; //保存当前选中的节点的邮箱信息。
  66.     FXml:TAppXml;
  67.     FFiles:TStrings;
  68.     procedure LoadRecvEmailAttch(EmailAddr:string);
  69.     procedure LoadSendEmailAttch(EmailAddr:string);
  70.     procedure LoadDraftAttch(EmailAddr:string);
  71.     procedure LoadAttampAttch(EmailAddr:string);
  72.     procedure ShowAttchInfo(List:TStrings);
  73.   public
  74.     { Public declarations }
  75.   end;
  76. var
  77.   frmAttchMgr: TfrmAttchMgr;
  78. implementation
  79. uses ufrmMain, UEmailFile,uCommon,ShellAPI, ufrmViewEmail;
  80. {$R *.dfm}
  81. procedure TfrmAttchMgr.FormCreate(Sender: TObject);
  82. begin
  83.   frmMain.LoadEmails(tvEMail);
  84.   FFiles :=TStringList.Create;
  85. end;
  86. procedure TfrmAttchMgr.LoadAttampAttch(EmailAddr:string);
  87. begin
  88.   if tvEMail.Selected.Text<>'定时邮件' then Exit;
  89.   FFiles.Clear;
  90.   FXml:=TAppXml.Create;
  91.   try
  92.     FXml.GetAllAttamp(EmailAddr,FFiles);
  93.   finally
  94.     FXml.Free;
  95.   end;
  96. end;
  97. procedure TfrmAttchMgr.LoadDraftAttch(EmailAddr:string);
  98. begin
  99.   if tvEMail.Selected.Text<>'草稿箱' then Exit;
  100.   FFiles.Clear;
  101.   FXml:=TAppXml.Create;
  102.   try
  103.     FXml.GetAllDraft(EmailAddr,FFiles);
  104.   finally
  105.     FXml.Free;
  106.   end;
  107. end;
  108. procedure TfrmAttchMgr.LoadRecvEmailAttch(EmailAddr:string);
  109. begin
  110.   if tvEMail.Selected.Text<>'收件箱' then Exit;
  111.   FFiles.Clear;
  112.   FXml:=TAppXml.Create;
  113.   try
  114.     FXml.GetAllEmail(EmailAddr,FFiles,nil,nil);
  115.   finally
  116.     FXml.Free;
  117.   end;
  118. end;
  119. procedure TfrmAttchMgr.LoadSendEmailAttch(EmailAddr:string);
  120. begin
  121.   if tvEMail.Selected.Text<>'发件箱' then Exit;
  122.   FFiles.Clear;
  123.   FXml:=TAppXml.Create;
  124.   try
  125.     FXml.GetAllSentEmail(EmailAddr,FFiles);
  126.   finally
  127.     FXml.Free;
  128.   end;
  129. end;
  130. procedure TfrmAttchMgr.tvEMailClick(Sender: TObject);
  131. begin
  132.   if (tvEMail.Selected=nil) or (tvEMail.Selected.Level<>1) then Exit;
  133.   FSelectedEmailAddr:=PPopInfo(tvEMail.Selected.Parent.data).EMailAddr;
  134.   frmMain.ClearTableView(tvAttchs);
  135.   LoadRecvEmailAttch(FSelectedEmailAddr);
  136.   LoadSendEmailAttch(FSelectedEmailAddr);
  137.   LoadDraftAttch(FSelectedEmailAddr);
  138.   LoadAttampAttch(FSelectedEmailAddr);
  139.   ShowAttchInfo(FFiles);
  140. end;
  141. procedure TfrmAttchMgr.FormDestroy(Sender: TObject);
  142. begin
  143.   FFiles.free;
  144. end;
  145. procedure TfrmAttchMgr.ShowAttchInfo(List: TStrings);
  146. var
  147.   EMail:TEmailFile;
  148.   I,J,idx:Integer;
  149. begin
  150.   tvAttchs.BeginUpdate;
  151.   try
  152.     for I:=0 to List.Count-1 do
  153.     begin
  154.       if not fileexists(List[I]) then continue;
  155.       EMail:=TEmailFile.Create(List[I]);
  156.       EMail.GetEmail;
  157.       for J:=0 to EMail.Attchs.Count-1 do
  158.       begin
  159.         if not FileExists(EMail.Attchs[J]) then Continue;
  160.         idx:=tvAttchs.DataController.AppendRecord;
  161.         tvAttchs.DataController.SetValue(idx,gtvColName.Index,ExtractFileName(EMail.Attchs[J]));
  162.         tvAttchs.DataController.SetValue(idx,gtvColFuulPath.Index,EMail.Attchs[J]);
  163.         tvAttchs.DataController.SetValue(idx,gtvColSize.Index,FileSizeInKB(EMail.Attchs[J]));
  164.         tvAttchs.DataController.SetValue(idx,gtvColInEmail.Index,EMail.Subject);
  165.         tvAttchs.DataController.SetValue(idx,gtvColSender.Index,EMail.Sender);
  166.         tvAttchs.DataController.SetValue(idx,gtvColEmailPath.Index,EMail.FilePath);
  167.         tvAttchs.DataController.SetValue(idx,gtvColDate.Index,EMail.Date);
  168.         tvAttchs.DataController.SetValue(idx,gtvColEMailAddr.Index,FSelectedEmailAddr);
  169.         tvAttchs.DataController.Post;
  170.       end;
  171.       EMail.Free;
  172.     end;
  173.   finally
  174.     tvAttchs.EndUpdate;
  175.   end;
  176. end;
  177. procedure TfrmAttchMgr.dxbrbtn3Click(Sender: TObject);  //open attch
  178. var
  179.   FilePath:string;
  180. begin
  181.   if tvAttchs.DataController.FocusedRecordIndex<0 then Exit;
  182.   FilePath:=tvAttchs.DataController.Values[tvAttchs.DataController.FocusedRecordIndex,gtvColFuulPath.Index];
  183.   if FileExists(FilePath) then
  184.     if ShellExecute(Self.Handle,PAnsiChar('open'),PAnsiChar(filepath),nil,nil,SW_SHOWNORMAL) <=32 then
  185.       MsgBoxError('无法运行文件!请你手动运行!');
  186. end;
  187. procedure TfrmAttchMgr.dxbrbtn6Click(Sender: TObject);   //save as
  188. var
  189.   FilePath:string;
  190. begin
  191.   if tvAttchs.DataController.FocusedRecordIndex<0 then Exit;
  192.   FilePath:=tvAttchs.DataController.Values[tvAttchs.DataController.FocusedRecordIndex,gtvColFuulPath.Index];
  193.   if FileExists(FilePath) then
  194.   begin
  195.     if dlgSave.Execute then
  196.       if CopyFile(PAnsiChar(FilePath),PAnsiChar(dlgSave.FileName),True)then
  197.         MsgBoxWarn('保存成功!')
  198.       else
  199.         MsgBoxError('无法拷贝文件!请你手动保存!');
  200.   end;
  201. end;
  202. procedure TfrmAttchMgr.dxbrbtn5Click(Sender: TObject);   //delete
  203. var
  204.   FilePath:string;
  205.   xml:TAppXml;
  206. begin
  207.   with tvAttchs.DataController do
  208.   begin
  209.     if FocusedRecordIndex<0 then Exit;
  210.     xml:=TAppXml.Create;
  211.     try
  212.       xml.DeleteAEmail(VarToStr(Values[FocusedRecordIndex,gtvColInEmail.Index]),VarToStr(Values[FocusedRecordIndex,gtvColEmailPath.Index]));
  213.     finally
  214.       xml.Free;
  215.     end;
  216.     
  217.     FilePath:=VarToStr(Values[FocusedRecordIndex,gtvColFuulPath.Index]);
  218.     DeleteRecord(FocusedRecordIndex);
  219.     if FileExists(FilePath) then
  220.       if DeleteFile(FilePath) then
  221.         MsgBoxWarn('删除成功!')
  222.       else
  223.         MsgBoxError('无法删除附件!请你手动删除!'#$D#$A'附件路径:'+FilePath);
  224.   end;
  225. end;
  226. procedure TfrmAttchMgr.FormResize(Sender: TObject);
  227. begin
  228.   lbl1.Width:=tvEMail.Width-2;
  229.   lbl3.Width:= Self.Width-lbl1.Width-45;
  230. end;
  231. procedure TfrmAttchMgr.btnOpnDirClick(Sender: TObject);
  232. var
  233.   Dir,Path:string;
  234.   ret:cardinal;
  235. begin
  236.   Path:=VarToStr(tvAttchs.DataController.Values[tvAttchs.DataController.FocusedRecordIndex,gtvColFuulPath.Index]);
  237.   if path='' then exit;
  238.   Dir:=ExtractFileDir(path);
  239.   if FileExists(Path)   then
  240.     ret:=ShellExecute(Handle,
  241.                  'OPEN',
  242.                  PChar('explorer.exe'),
  243.                  PChar('/select, "' + Path + '"'),
  244.                  nil,
  245.                  SW_NORMAL)
  246.   else                     
  247.     ret:=ShellExecute(Handle,'open','Explorer.exe',PAnsiChar(Dir),nil,1);
  248.   if ret<=32 then
  249.     if (ret=ERROR_PATH_NOT_FOUND) or (ret=SE_ERR_PNF) then
  250.       MsgBoxError(Format('目录%S不存在',[Dir]))
  251.     else
  252.       MsgBoxError(Format('无法打开目录%S,请您手动打开',[Dir]));
  253. end;
  254. procedure TfrmAttchMgr.dxbrbtn4Click(Sender: TObject);
  255. begin
  256.   if tvAttchs.DataController.FocusedRecordIndex<0 then exit;
  257.   with TfrmViewEmail.Create(Application)do
  258.   begin
  259.     try
  260.       FTableView:=tvAttchs;
  261.       FCurRecordIndex:=tvAttchs.DataController.FocusedRecordIndex;
  262.       FContentFileItemIndex:=gtvColEmailPath.Index;
  263.       FRecverEmail:= tvAttchs.DataController.Values[tvAttchs.DataController.FocusedRecordIndex, gtvColEMailAddr.Index];
  264.       FSenderEmail:= tvAttchs.DataController.Values[tvAttchs.DataController.FocusedRecordIndex, gtvColSender.Index];
  265.       ShowEmail;
  266.       ShowModal;
  267.     finally
  268.       Free;
  269.     end;
  270.   end;
  271. end;
  272. procedure TfrmAttchMgr.tvEMailDeletion(Sender: TObject; Node: TTreeNode);
  273. begin
  274.   if Node.Data<>nil then Dispose(Node.Data) ;
  275. end;
  276. end.