home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / intmail2 / spopmain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-07-27  |  11.2 KB  |  439 lines

  1. unit spopmain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, ExtCtrls, Buttons, Menus,
  8. {$IFDEF VER120}
  9.   ImgList,
  10. {$ENDIF}
  11.   IniFiles, Mssocket, Mspop, msmsg, msUtils;
  12.  
  13. type
  14.   TSelForm = class(TForm)
  15.     ButtonBar: TPanel;
  16.     StatusBar: TStatusBar;
  17.     ServerListView: TListView;
  18.     UpdateHeadersButton: TSpeedButton;
  19.     RetrieveButton: TSpeedButton;
  20.     DeleteButton: TSpeedButton;
  21.     RetrieveCopyButton: TSpeedButton;
  22.     ResetAllButton: TSpeedButton;
  23.     TransferMailButton: TSpeedButton;
  24.     CancelButton: TSpeedButton;
  25.     SetupButton: TSpeedButton;
  26.     ExitButton: TSpeedButton;
  27.     MainMenu1: TMainMenu;
  28.     File1: TMenuItem;
  29.     UpdateHeaders1: TMenuItem;
  30.     MarktoRetrieve1: TMenuItem;
  31.     MarktoRetrieveaCopy1: TMenuItem;
  32.     MarktoDelete1: TMenuItem;
  33.     ResetAll1: TMenuItem;
  34.     Cancel1: TMenuItem;
  35.     N1: TMenuItem;
  36.     Exit1: TMenuItem;
  37.     Setup1: TMenuItem;
  38.     Help1: TMenuItem;
  39.     About1: TMenuItem;
  40.     StateImgList: TImageList;
  41.     msPOPClient1: TmsPOPClient;
  42.     msMessage: TmsMessage;
  43.     MailBoxListView: TListView;
  44.     MsgImageList: TImageList;
  45.     PopupMenu1: TPopupMenu;
  46.     Show1: TMenuItem;
  47.     SavetoFile1: TMenuItem;
  48.     SaveDialog1: TSaveDialog;
  49.     procedure SetupButtonClick(Sender: TObject);
  50.     procedure FormCreate(Sender: TObject);
  51.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  52.     procedure ExitButtonClick(Sender: TObject);
  53.     procedure UpdateHeadersButtonClick(Sender: TObject);
  54.     procedure msPOPClient1Connecting(Sender: TObject);
  55.     procedure msPOPClient1Connected(Sender: TObject);
  56.     procedure msPOPClient1Disconnected(Sender: TObject);
  57.     procedure RetrieveButtonClick(Sender: TObject);
  58.     procedure RetrieveCopyButtonClick(Sender: TObject);
  59.     procedure DeleteButtonClick(Sender: TObject);
  60.     procedure ResetAllButtonClick(Sender: TObject);
  61.     procedure TransferMailButtonClick(Sender: TObject);
  62.     procedure CancelButtonClick(Sender: TObject);
  63.     procedure MailBoxListViewDblClick(Sender: TObject);
  64.     procedure MailBoxListViewChange(Sender: TObject; Item: TListItem;
  65.       Change: TItemChange);
  66.     procedure PopupMenu1Popup(Sender: TObject);
  67.     procedure Show1Click(Sender: TObject);
  68.     procedure SavetoFile1Click(Sender: TObject);
  69.     procedure msPOPClient1TransferProgress(Sender: TObject; Perc,
  70.       ByteCount, LineCount: Longint);
  71.   private
  72.     { Private declarations }
  73.     IniName: string;
  74.     SaveAsIs: boolean;
  75.     procedure AddMessageToMailBox(Msg: TmsMessage);
  76.     procedure EnableControls;
  77.     procedure DisableControls;
  78.     procedure AddMessageStreamToMailBox(Stream: TStream; MsgNo: Integer);
  79.   public
  80.     { Public declarations }
  81.   end;
  82.  
  83. var
  84.   SelForm: TSelForm;
  85.  
  86. implementation
  87.  
  88. uses spopsu, popview;
  89.  
  90. {$R *.DFM}
  91.  
  92. procedure TSelForm.SetupButtonClick(Sender: TObject);
  93. begin
  94.   with TsPOPSetupDlg.Create(Self) do
  95.   try
  96.     ServerEdit.Text:=msPOPClient1.Host;
  97.     UserNameEdit.Text:=msPOPClient1.UserName;
  98.     PasswordEdit.Text:=msPOPClient1.Password;
  99.     LogFileNameEdit.Text:=msPOPClient1.LogFileName;
  100.     AsIsCheckBox.Checked:=SaveAsIs;
  101.     if ShowModal=mrOk then
  102.     begin
  103.       msPOPClient1.Host:=ServerEdit.Text;
  104.       msPOPClient1.UserName:=UserNameEdit.Text;
  105.       msPOPClient1.Password:=PasswordEdit.Text;
  106.       msPOPClient1.LogFileName:=LogFileNameEdit.Text;
  107.       SaveAsIs:=AsIsCheckBox.Checked;
  108.     end;
  109.   finally
  110.     Free;
  111.   end;
  112. end;
  113.  
  114. procedure TSelForm.FormCreate(Sender: TObject);
  115. begin
  116.   IniName:=ChangeFileExt(Application.ExeName,'.ini');
  117.   with TIniFile.Create(IniName) do
  118.   try
  119.     msPOPClient1.Host:=ReadString('Setup','Server','');
  120.     msPOPClient1.UserName:=ReadString('Setup','User Name','');
  121.     msPOPClient1.Password:=ReadString('Setup','Password','');
  122.     msPOPClient1.LogFileName:=ReadString('Setup','Log File','');
  123.     SaveAsIs:=ReadBool('Setup','Save as is',false);
  124.   finally
  125.     free;
  126.   end;
  127.   EnableControls;
  128. end;
  129.  
  130. procedure TSelForm.FormClose(Sender: TObject; var Action: TCloseAction);
  131. begin
  132.   with TIniFile.Create(IniName) do
  133.   try
  134.     WriteString('Setup','Server',msPOPClient1.Host);
  135.     WriteString('Setup','User Name',msPOPClient1.UserName);
  136.     WriteString('Setup','Password',msPOPClient1.Password);
  137.     WriteString('Setup','Log File',msPOPClient1.LogFileName);
  138.     WriteBool('Setup','Save as is',SaveAsIs);
  139.   finally
  140.     free;
  141.   end;
  142.   msPOPClient1.SaveLogFile;
  143. end;
  144.  
  145. procedure TSelForm.ExitButtonClick(Sender: TObject);
  146. begin
  147.   Close;
  148. end;
  149.  
  150. procedure TSelForm.UpdateHeadersButtonClick(Sender: TObject);
  151. var
  152.   Item: TListItem;
  153.   DT: TDateTime;
  154.   TZ: ShortString;
  155.   SenderName: string;
  156.   Size: LongInt;
  157.   i: Integer;
  158. begin
  159.   DisableControls;
  160.   try
  161.     ServerListView.Items.Clear;
  162.     StatusBar.Panels[1].Text:='';
  163.     with msPOPClient1 do
  164.     begin
  165.       Login;
  166.       StatusBar.Panels[1].Text:=IntToStr(TotalMessages)+'  messages on server';
  167.       for i:=0 to msPOPClient1.TotalMessages-1 do
  168.       begin
  169.         msPOPClient1.CurrentMessage:=i;
  170.         RetrieveHeaders;
  171.         Size:=GetSize;
  172.         Item:=ServerListView.Items.Add;
  173.         Item.Caption:=MailMessage.Subject;
  174.         SenderName:=MailMessage.Sender.Name;
  175.         if SenderName='' then
  176.           SenderName:=MailMessage.Sender.Address;
  177.         Item.SubItems.Add(SenderName);
  178.         Item.SubItems.Add(IntToStr(Size));
  179.         MailDateToDateTime(MailMessage.Headers.GetFieldBody('Date'),DT,TZ);
  180.         Item.SubItems.Add(DateTimeToStr(DT));
  181.       end;
  182.       Logout;
  183.     end;
  184.   finally
  185.     EnableControls;
  186.   end;
  187. end;
  188.  
  189. procedure TSelForm.msPOPClient1Connecting(Sender: TObject);
  190. begin
  191.   StatusBar.Panels[0].Text:='Connecting to the server';
  192. end;
  193.  
  194. procedure TSelForm.msPOPClient1Connected(Sender: TObject);
  195. begin
  196.   StatusBar.Panels[0].Text:='Connected';
  197. end;
  198.  
  199. procedure TSelForm.msPOPClient1Disconnected(Sender: TObject);
  200. begin
  201.   StatusBar.Panels[0].Text:='Disconnected';
  202. end;
  203.  
  204. procedure TSelForm.RetrieveButtonClick(Sender: TObject);
  205. var
  206.   i: Integer;
  207. begin
  208.   with ServerListView do
  209.   begin
  210.     for i:=0 to Items.Count-1 do
  211.     begin
  212.       if Items[i].Selected then
  213.         Items[i].StateIndex:=0;
  214.     end;
  215.   end;
  216. end;
  217.  
  218. procedure TSelForm.RetrieveCopyButtonClick(Sender: TObject);
  219. var
  220.   i: Integer;
  221. begin
  222.   with ServerListView do
  223.   begin
  224.     for i:=0 to Items.Count-1 do
  225.     begin
  226.       if Items[i].Selected then
  227.         Items[i].StateIndex:=1;
  228.     end;
  229.   end;
  230. end;
  231.  
  232. procedure TSelForm.DeleteButtonClick(Sender: TObject);
  233. var
  234.   i: Integer;
  235. begin
  236.   with ServerListView do
  237.   begin
  238.     for i:=0 to Items.Count-1 do
  239.     begin
  240.       if Items[i].Selected then
  241.         Items[i].StateIndex:=2;
  242.     end;
  243.   end;
  244. end;
  245.  
  246. procedure TSelForm.ResetAllButtonClick(Sender: TObject);
  247. var
  248.   i: Integer;
  249. begin
  250.   with ServerListView do
  251.   begin
  252.     for i:=0 to Items.Count-1 do
  253.         Items[i].StateIndex:=-1;
  254.   end;
  255. end;
  256.  
  257. procedure TSelForm.AddMessageToMailBox(Msg: TmsMessage);
  258. var
  259.   Item: TListItem;
  260.   TempStream: TStream;
  261. begin
  262.   TempStream:=TMemoryStream.Create;
  263.   Item:=MailBoxListView.Items.Add;
  264.   Item.Caption:=Msg.Subject;
  265.   Item.ImageIndex:=0;
  266.   Msg.SaveToStream(TempStream);
  267.   Item.Data:=TempStream;
  268. end;
  269.  
  270. procedure TSelForm.AddMessageStreamToMailBox(Stream: TStream; MsgNo: Integer);
  271. var
  272.   Item: TListItem;
  273. begin
  274.   Item:=MailBoxListView.Items.Add;
  275.   Item.Caption:='Msg No '+IntToStr(MsgNo);
  276.   Item.ImageIndex:=0;
  277.   Item.Data:=Stream;
  278. end;
  279.  
  280. procedure TSelForm.TransferMailButtonClick(Sender: TObject);
  281. var
  282.   i: Integer;
  283.   Stream: TStream;
  284. begin
  285.   DisableControls;
  286.   try
  287.     with msPOPClient1 do
  288.     begin
  289.       Login;
  290.       for i:=0 to TotalMessages-1 do
  291.       begin
  292.         CurrentMessage:=i;
  293.         case ServerListView.Items[i].StateIndex of
  294.           0:
  295.           begin
  296.             if SaveAsIs then
  297.             begin
  298.               Stream:=TMemoryStream.Create;
  299.               RetrieveAsStream(Stream);
  300.               AddMessageStreamToMailBox(Stream,i);
  301.             end
  302.             else
  303.             begin
  304.               Retrieve;
  305.               AddMessageToMailBox(MailMessage);
  306.             end;
  307.             Delete;
  308.           end;
  309.           1:
  310.           begin
  311.             if SaveAsIs then
  312.             begin
  313.               Stream:=TMemoryStream.Create;
  314.               RetrieveAsStream(Stream);
  315.               AddMessageStreamToMailBox(Stream,i);
  316.             end
  317.             else
  318.             begin
  319.               Retrieve;
  320.               AddMessageToMailBox(MailMessage);
  321.             end;
  322.           end;
  323.           2:
  324.           begin
  325.             Delete;
  326.           end;
  327.         end;
  328.       end;
  329.       Logout;
  330.     end;
  331.     UpdateHeadersButtonClick(Self);
  332.   finally
  333.     EnableControls;
  334.   end;
  335. end;
  336.  
  337. procedure TSelForm.CancelButtonClick(Sender: TObject);
  338. begin
  339.   msPOPClient1.Cancel;
  340. end;
  341.  
  342. procedure TSelForm.MailBoxListViewDblClick(Sender: TObject);
  343. var
  344.   TempMessage: TmsMessage;
  345. begin
  346.   if MailBoxListView.Selected<>nil then
  347.   begin
  348.     TempMessage:=TmsMessage.Create(Self);
  349.     try
  350.       MsgViewDlg:=TMsgViewDlg.Create(Self);
  351.       TempMessage.LoadFromStream(MailBoxListView.Selected.Data);
  352.       MsgViewDlg.MailMessage:=TempMessage;
  353.       MsgViewDlg.ShowModal;
  354.       MsgViewDlg.Free;
  355.     finally
  356.       TempMessage.Free;
  357.     end;
  358.   end;
  359. end;
  360.  
  361. procedure TSelForm.MailBoxListViewChange(Sender: TObject; Item: TListItem;
  362.   Change: TItemChange);
  363. begin
  364.   StatusBar.Panels[2].Text:=IntToStr(MailBoxListView.Items.Count)+' messages retrieved';
  365. end;
  366.  
  367. procedure TSelForm.DisableControls;
  368. // Disable the buttons/manu items which are unaccessible
  369. // during the communication with server
  370. begin
  371.   UpdateHeadersButton.Enabled:=false;
  372.   UpdateHeaders1.Enabled:=false;
  373.   RetrieveButton.Enabled:=false;
  374.   MarktoRetrieve1.Enabled:=false;
  375.   RetrieveCopyButton.Enabled:=false;
  376.   MarktoRetrieveaCopy1.Enabled:=false;
  377.   DeleteButton.Enabled:=false;
  378.   MarktoDelete1.Enabled:=false;
  379.   ResetAllButton.Enabled:=false;
  380.   ResetAll1.Enabled:=false;
  381.   CancelButton.Enabled:=true;
  382.   Cancel1.Enabled:=true;
  383. end;
  384.  
  385. procedure TSelForm.EnableControls;
  386. begin
  387.   UpdateHeadersButton.Enabled:=true;
  388.   UpdateHeaders1.Enabled:=true;
  389.   RetrieveButton.Enabled:=true;
  390.   MarktoRetrieve1.Enabled:=true;
  391.   RetrieveCopyButton.Enabled:=true;
  392.   MarktoRetrieveaCopy1.Enabled:=true;
  393.   DeleteButton.Enabled:=true;
  394.   MarktoDelete1.Enabled:=true;
  395.   ResetAllButton.Enabled:=true;
  396.   ResetAll1.Enabled:=true;
  397.   CancelButton.Enabled:=false;
  398.   Cancel1.Enabled:=false;
  399. end;
  400.  
  401. procedure TSelForm.PopupMenu1Popup(Sender: TObject);
  402. begin
  403.   if MailBoxListView.Selected<>nil then
  404.   begin
  405.     Show1.Enabled:=true;
  406.     SaveToFile1.Enabled:=true;
  407.   end
  408.   else
  409.   begin
  410.     Show1.Enabled:=false;
  411.     SaveToFile1.Enabled:=false;
  412.   end;
  413. end;
  414.  
  415. procedure TSelForm.Show1Click(Sender: TObject);
  416. begin
  417.   MailBoxListViewDblClick(Sender);
  418. end;
  419.  
  420. procedure TSelForm.SavetoFile1Click(Sender: TObject);
  421. var
  422.   Stream: TMemoryStream;
  423. begin
  424.   if SaveDialog1.Execute then
  425.   begin
  426.     Stream:=TMemoryStream(MailBoxListView.Selected.Data);
  427.     Stream.SaveToFile(SaveDialog1.FileName);
  428.   end;
  429. end;
  430.  
  431. procedure TSelForm.msPOPClient1TransferProgress(Sender: TObject; Perc,
  432.   ByteCount, LineCount: Longint);
  433. begin
  434.   if Perc<>-1 then
  435.     StatusBar.Panels[0].Text:='Transferring data ('+IntToStr(Perc)+'%)';
  436. end;
  437.  
  438. end.
  439.