home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd1.bin / zkuste / delphi / kompon / d567 / MAIL2000.ZIP / DemoForm.pas < prev    next >
Pascal/Delphi Source File  |  2001-08-01  |  18KB  |  755 lines

  1. unit DemoForm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ComCtrls, Mail2000;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     PageControl1: TPageControl;
  12.     TabSheet1: TTabSheet;
  13.     bConnect: TButton;
  14.     Label1: TLabel;
  15.     eHost: TEdit;
  16.     Label2: TLabel;
  17.     eUsername: TEdit;
  18.     Label3: TLabel;
  19.     ePassword: TEdit;
  20.     lStatus: TLabel;
  21.     bDisconnect: TButton;
  22.     bRetrieve: TButton;
  23.     eMsgNum: TEdit;
  24.     UpDown1: TUpDown;
  25.     TabSheet2: TTabSheet;
  26.     TabSheet3: TTabSheet;
  27.     PageControl2: TPageControl;
  28.     TabSheet4: TTabSheet;
  29.     mHeader: TMemo;
  30.     TabSheet5: TTabSheet;
  31.     Label7: TLabel;
  32.     eFromName: TEdit;
  33.     Label8: TLabel;
  34.     eFromAddress: TEdit;
  35.     Label10: TLabel;
  36.     eReplyName: TEdit;
  37.     Label11: TLabel;
  38.     eReplyAddress: TEdit;
  39.     TabSheet6: TTabSheet;
  40.     mTextHtml: TMemo;
  41.     Label6: TLabel;
  42.     lbFiles: TListBox;
  43.     bSave: TButton;
  44.     bAttach: TButton;
  45.     Label5: TLabel;
  46.     bHtml: TButton;
  47.     Label9: TLabel;
  48.     mTextPlain: TMemo;
  49.     bPlain: TButton;
  50.     Label12: TLabel;
  51.     eSubject: TEdit;
  52.     Label13: TLabel;
  53.     dtDate: TDateTimePicker;
  54.     dtTime: TDateTimePicker;
  55.     Label14: TLabel;
  56.     Label15: TLabel;
  57.     Label16: TLabel;
  58.     Label17: TLabel;
  59.     Label18: TLabel;
  60.     Label19: TLabel;
  61.     Label20: TLabel;
  62.     eLabel: TEdit;
  63.     Label21: TLabel;
  64.     eValue: TEdit;
  65.     bLabel: TButton;
  66.     bDelLabel: TButton;
  67.     Label22: TLabel;
  68.     mBody: TMemo;
  69.     OpenDialog: TOpenDialog;
  70.     bRebuild: TButton;
  71.     bReset: TButton;
  72.     bRefresh: TButton;
  73.     Label23: TLabel;
  74.     eSmtpHost: TEdit;
  75.     bSmtpConnect: TButton;
  76.     bSmtpDisconnect: TButton;
  77.     bSend: TButton;
  78.     POP: TPOP2000;
  79.     SMTP: TSMTP2000;
  80.     Label4: TLabel;
  81.     Label24: TLabel;
  82.     SaveDialog: TSaveDialog;
  83.     bSaveMsg: TButton;
  84.     Label25: TLabel;
  85.     bLoadMsg: TButton;
  86.     bRemove: TButton;
  87.     bPlainRemove: TButton;
  88.     bHtmlRemove: TButton;
  89.     ProgressBar1: TProgressBar;
  90.     ProgressBar2: TProgressBar;
  91.     ProgressBar3: TProgressBar;
  92.     Msg: TMailMessage2000;
  93.     Label26: TLabel;
  94.     ePort: TEdit;
  95.     Label27: TLabel;
  96.     eSmtpPort: TEdit;
  97.     Label28: TLabel;
  98.     eToName: TEdit;
  99.     Label29: TLabel;
  100.     eToAddress: TEdit;
  101.     bAddTo: TButton;
  102.     bAddCc: TButton;
  103.     bClearTo: TButton;
  104.     bClearCc: TButton;
  105.     mToNames: TListBox;
  106.     mToAddresses: TListBox;
  107.     mCcNames: TListBox;
  108.     mCcAddresses: TListBox;
  109.     TabSheet7: TTabSheet;
  110.     mHops: TMemo;
  111.     mResponse: TMemo;
  112.     mSmtpResponse: TMemo;
  113.     Label31: TLabel;
  114.     bSaveHeader1: TButton;
  115.     cbEmbedded: TCheckBox;
  116.     bNormalize: TButton;
  117.     cbHeader: TCheckBox;
  118.     bDelete: TButton;
  119.     bUIDL: TButton;
  120.     Label30: TLabel;
  121.     lSmtpStatus: TLabel;
  122.     bAbort: TButton;
  123.     bSmtpAbort: TButton;
  124.     bFindParts: TButton;
  125.     procedure bConnectClick(Sender: TObject);
  126.     procedure bDisconnectClick(Sender: TObject);
  127.     procedure bRetrieveClick(Sender: TObject);
  128.     procedure bRefreshClick(Sender: TObject);
  129.     procedure bRebuildClick(Sender: TObject);
  130.     procedure bResetClick(Sender: TObject);
  131.     procedure bLabelClick(Sender: TObject);
  132.     procedure bDelLabelClick(Sender: TObject);
  133.     procedure bSaveHeaderClick(Sender: TObject);
  134.     procedure bSaveClick(Sender: TObject);
  135.     procedure bAttachClick(Sender: TObject);
  136.     procedure bPlainClick(Sender: TObject);
  137.     procedure bHtmlClick(Sender: TObject);
  138.     procedure FormShow(Sender: TObject);
  139.     procedure bSaveMsgClick(Sender: TObject);
  140.     procedure bSmtpConnectClick(Sender: TObject);
  141.     procedure bSmtpDisconnectClick(Sender: TObject);
  142.     procedure bSendClick(Sender: TObject);
  143.     procedure bLoadMsgClick(Sender: TObject);
  144.     procedure bRemoveClick(Sender: TObject);
  145.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  146.     procedure POPProgress(Sender: TObject; Total, Current: Integer);
  147.     procedure MsgProgress(Sender: TObject; Total, Current: Integer);
  148.     procedure SMTPProgress(Sender: TObject; Total, Current: Integer);
  149.     procedure bPlainRemoveClick(Sender: TObject);
  150.     procedure bHtmlRemoveClick(Sender: TObject);
  151.     procedure bAddToClick(Sender: TObject);
  152.     procedure bAddCcClick(Sender: TObject);
  153.     procedure bClearToClick(Sender: TObject);
  154.     procedure bClearCcClick(Sender: TObject);
  155.     procedure mToNamesClick(Sender: TObject);
  156.     procedure mToAddressesClick(Sender: TObject);
  157.     procedure mCcNamesClick(Sender: TObject);
  158.     procedure mCcAddressesClick(Sender: TObject);
  159.     procedure bNormalizeClick(Sender: TObject);
  160.     procedure bDeleteClick(Sender: TObject);
  161.     procedure bUIDLClick(Sender: TObject);
  162.     procedure bAbortClick(Sender: TObject);
  163.     procedure bSmtpAbortClick(Sender: TObject);
  164.     procedure bFindPartsClick(Sender: TObject);
  165.   end;
  166.  
  167. var
  168.   Form1: TForm1;
  169.  
  170. implementation
  171.  
  172. {$R *.DFM}
  173.  
  174. procedure TForm1.bConnectClick(Sender: TObject);
  175. begin
  176.  
  177.   Screen.Cursor := crHourglass;
  178.   POP.UserName := eUserName.Text;
  179.   POP.Password := ePassword.Text;
  180.   POP.Host := eHost.Text;
  181.   POP.Port := StrToInt(ePort.Text);
  182.  
  183.   if POP.Connect then
  184.   begin
  185.  
  186.     if POP.Login then
  187.     begin
  188.  
  189.       lStatus.Caption := IntToStr(POP.SessionMessageCount)+' messages on server';
  190.       bDisconnect.Enabled := True;
  191.       bRetrieve.Enabled := True;
  192.       bDelete.Enabled := True;
  193.       bUIDL.Enabled := True;
  194.       bConnect.Enabled := False;
  195.       UpDown1.Max := POP.SessionMessageCount;
  196.       mResponse.Lines.Text := POP.LastResponse;
  197.     end
  198.     else
  199.     begin
  200.  
  201.       POP.Abort;
  202.       mResponse.Lines.Text := POP.LastResponse;
  203.       lStatus.Caption := 'Failed on login';
  204.     end;
  205.   end
  206.   else
  207.   begin
  208.  
  209.     POP.Abort;
  210.     mResponse.Lines.Text := POP.LastResponse;
  211.     lStatus.Caption := 'Failed on connect';
  212.   end;
  213.  
  214.   Screen.Cursor := crDefault;
  215. end;
  216.  
  217. procedure TForm1.bDisconnectClick(Sender: TObject);
  218. begin
  219.  
  220.   Screen.Cursor := crHourglass;
  221.  
  222.   if POP.Quit then
  223.   begin
  224.  
  225.     lStatus.Caption := 'Disconnected';
  226.   end
  227.   else
  228.   begin
  229.  
  230.     POP.Abort;
  231.     lStatus.Caption := 'Failed on quit';
  232.   end;
  233.  
  234.   bDisconnect.Enabled := False;
  235.   bRetrieve.Enabled := False;
  236.   bDelete.Enabled := False;
  237.   bUIDL.Enabled := False;
  238.   bConnect.Enabled := True;
  239.   mResponse.Lines.Text := POP.LastResponse;
  240.   Screen.Cursor := crDefault;
  241. end;
  242.  
  243. procedure TForm1.bRetrieveClick(Sender: TObject);
  244. var
  245.   Result: Boolean;
  246.  
  247. begin
  248.  
  249.   Screen.Cursor := crHourglass;
  250.   ProgressBar1.Position := 0;
  251.   ProgressBar2.Position := 0;
  252.  
  253.   if cbHeader.Checked then
  254.     Result := POP.RetrieveHeader(StrToInt(eMsgNum.Text))
  255.   else
  256.     Result := POP.RetrieveMessage(StrToInt(eMsgNum.Text));
  257.  
  258.   if Result then
  259.   begin
  260.  
  261.     bRefreshClick(Sender);
  262.   end
  263.   else
  264.   begin
  265.  
  266.     lStatus.Caption := 'Failed on retrieve';
  267.   end;
  268.  
  269.   mResponse.Lines.Text := Copy(POP.LastResponse, 1, 10000);
  270.   Screen.Cursor := crDefault;
  271. end;
  272.  
  273. procedure TForm1.bRefreshClick(Sender: TObject);
  274. var
  275.   Loop: Integer;
  276.   Text: String;
  277.  
  278. begin
  279.  
  280.   Screen.Cursor := crHourglass;
  281.  
  282.   SetLength(Text, Msg.Body.Size);
  283.  
  284.   if Length(Text) > 0 then
  285.   begin
  286.  
  287.     Msg.Body.Position := 0;
  288.     Msg.Body.ReadBuffer(Text[1], Msg.Body.Size);
  289.   end;
  290.  
  291.   mHeader.Lines.Text := Copy(Msg.Header.Text, 1, 10000);
  292.   mBody.Lines.Text := Copy(Text, 1, 10000);
  293.   eFromName.Text := Msg.FromName;
  294.   eFromAddress.Text := Msg.FromAddress;
  295.   eReplyName.Text := Msg.ReplyToName;
  296.   eReplyAddress.Text := Msg.ReplyToAddress;
  297.   eSubject.Text := Msg.Subject;
  298.   dtDate.DateTime := Msg.Date;
  299.   dtTime.DateTime := Msg.Date;
  300.  
  301.   mToNames.Clear;
  302.   mToAddresses.Clear;
  303.   mCcNames.Clear;
  304.   mCcAddresses.Clear;
  305.   lbFiles.Clear;
  306.  
  307.   mTextPlain.Lines.Text := Msg.TextPlain.Text;
  308.   mTextHtml.Lines.Text := Msg.TextHTML.Text;
  309.  
  310.   mToNames.Items.CommaText := Msg.ToList.AllNames;
  311.   mToAddresses.Items.CommaText := Msg.ToList.AllAddresses;
  312.  
  313.   mCcNames.Items.CommaText := Msg.CcList.AllNames;
  314.   mCcAddresses.Items.CommaText := Msg.CcList.AllAddresses;
  315.  
  316.   for Loop := 0 to Msg.AttachList.Count-1 do
  317.   begin
  318.  
  319.     if Msg.AttachList[Loop].Decoded.Size = 0 then
  320.       Msg.AttachList[Loop].Decode;
  321.  
  322.     if Msg.AttachList[Loop].Embedded then
  323.       lbFiles.Items.Add(Msg.AttachList[Loop].FileName+#32'('+IntToStr(Msg.AttachList[Loop].Decoded.Size)+')'#32+Msg.AttachList[Loop].AttachInfo+#32'Embedded')
  324.     else
  325.       lbFiles.Items.Add(Msg.AttachList[Loop].FileName+#32'('+IntToStr(Msg.AttachList[Loop].Decoded.Size)+')'#32+Msg.AttachList[Loop].AttachInfo);
  326.   end;
  327.  
  328.   if Msg.NeedFindParts then
  329.     bFindParts.Font.Style := [fsBold]
  330.   else
  331.     bFindParts.Font.Style := [];
  332.  
  333.   if Msg.NeedNormalize then
  334.     bNormalize.Font.Style := [fsBold]
  335.   else
  336.     bNormalize.Font.Style := [];
  337.  
  338.   if Msg.NeedRebuild then
  339.     bRebuild.Font.Style := [fsBold]
  340.   else
  341.     bRebuild.Font.Style := [];
  342.  
  343.   mHops.Clear;
  344.  
  345.   for Loop := Msg.ReceivedCount-1 downto 0 do
  346.   begin
  347.  
  348.     mHops.Lines.Add(FormatDateTime('yyyy-mm-dd hh:nn:ss', Msg.Received[Loop].Date)+
  349.                     #32'By ('+Msg.Received[Loop].By+')'+
  350.                     #32'From ('+Msg.Received[Loop].From+')'+
  351.                     #32'For ('+Msg.Received[Loop].Address+')');
  352.   end;
  353.  
  354.   Screen.Cursor := crDefault;
  355. end;
  356.  
  357. procedure TForm1.bRebuildClick(Sender: TObject);
  358. begin
  359.  
  360.   Screen.Cursor := crHourglass;
  361.   Msg.RebuildBody;
  362.   bRefreshClick(Sender);
  363.   Screen.Cursor := crDefault;
  364. end;
  365.  
  366. procedure TForm1.bResetClick(Sender: TObject);
  367. begin
  368.  
  369.   Screen.Cursor := crHourglass;
  370.   Msg.Reset;
  371.   Screen.Cursor := crDefault;
  372.   bRefreshClick(Sender);
  373. end;
  374.  
  375. procedure TForm1.bLabelClick(Sender: TObject);
  376. begin
  377.  
  378.   Msg.SetLabelValue(eLabel.Text, eValue.Text);
  379.   bRefreshClick(Sender);
  380. end;
  381.  
  382. procedure TForm1.bDelLabelClick(Sender: TObject);
  383. begin
  384.  
  385.   Msg.SetLabelValue(eLabel.Text, '');
  386.   bRefreshClick(Sender);
  387. end;
  388.  
  389. procedure TForm1.bSaveHeaderClick(Sender: TObject);
  390. begin
  391.  
  392.   Screen.Cursor := crHourglass;
  393.  
  394.   Msg.ToList.Clear;
  395.   Msg.CcList.Clear;
  396.   Msg.SetFrom(eFromName.Text, eFromAddress.Text);
  397.   Msg.SetReplyTo(eReplyName.Text, eReplyAddress.Text);
  398.   Msg.Subject := eSubject.Text;
  399.   Msg.Date := Int(dtDate.DateTime) + dtTime.DateTime - Int(dtTime.DateTime);
  400.  
  401.   if mToNames.Items.Count > 0 then
  402.     Msg.ToList.SetAll(mToNames.Items.CommaText, mToAddresses.Items.CommaText);
  403.  
  404.   if mCcNames.Items.Count > 0 then
  405.     Msg.CcList.SetAll(mCcNames.Items.CommaText, mCcAddresses.Items.CommaText);
  406.  
  407.   Screen.Cursor := crDefault;
  408.   bRefreshClick(Sender);
  409. end;
  410.  
  411. procedure TForm1.bSaveClick(Sender: TObject);
  412. begin
  413.  
  414.   SaveDialog.FileName := Msg.AttachList[lbFiles.ItemIndex].FileName;
  415.  
  416.   if SaveDialog.Execute then
  417.   begin
  418.  
  419.     Screen.Cursor := crHourglass;
  420.     Msg.AttachList[lbFiles.ItemIndex].Decoded.SaveToFile(SaveDialog.FileName);
  421.     Screen.Cursor := crDefault;
  422.   end;
  423. end;
  424.  
  425. procedure TForm1.bAttachClick(Sender: TObject);
  426. begin
  427.  
  428.   if OpenDialog.Execute then
  429.   begin
  430.  
  431.     Screen.Cursor := crHourglass;
  432.     Msg.AttachFile(OpenDialog.FileName, '', etBase64, cbEmbedded.Checked);
  433.     bRefreshClick(Sender);
  434.     Screen.Cursor := crDefault;
  435.   end;
  436. end;
  437.  
  438. procedure TForm1.bPlainClick(Sender: TObject);
  439. begin
  440.  
  441.   Screen.Cursor := crHourglass;
  442.   Msg.SetTextPlain(mTextPlain.Lines.Text);
  443.   bRefreshClick(Sender);
  444.   Screen.Cursor := crDefault;
  445. end;
  446.  
  447. procedure TForm1.bHtmlClick(Sender: TObject);
  448. begin
  449.  
  450.   Screen.Cursor := crHourglass;
  451.   Msg.SetTextHTML(mTextHtml.Lines.Text);
  452.   bRefreshClick(Sender);
  453.   Screen.Cursor := crDefault;
  454. end;
  455.  
  456. procedure TForm1.FormShow(Sender: TObject);
  457. begin
  458.  
  459.   PageControl1.ActivePage := PageControl1.Pages[0];
  460.   PageControl2.ActivePage := PageControl2.Pages[0];
  461.   dtDate.DateTime := Now;
  462.   dtTime.DateTime := Now;
  463.   bRefreshClick(Sender);
  464. end;
  465.  
  466. procedure TForm1.bSaveMsgClick(Sender: TObject);
  467. begin
  468.  
  469.   SaveDialog.FileName := 'message.eml';
  470.  
  471.   if SaveDialog.Execute then
  472.   begin
  473.  
  474.     Screen.Cursor := crHourglass;
  475.     Msg.SaveToFile(SaveDialog.FileName);
  476.     Screen.Cursor := crDefault;
  477.   end;
  478. end;
  479.  
  480. procedure TForm1.bSmtpConnectClick(Sender: TObject);
  481. begin
  482.  
  483.   Screen.Cursor := crHourglass;
  484.   SMTP.Host := eSmtpHost.Text;
  485.   SMTP.Port := StrToInt(eSmtpPort.Text);
  486.  
  487.   if SMTP.Connect then
  488.   begin
  489.  
  490.     lSmtpStatus.Caption := 'Connected';
  491.     bSmtpDisconnect.Enabled := True;
  492.     bSmtpConnect.Enabled := False;
  493.     bSend.Enabled := True;
  494.   end
  495.   else
  496.   begin
  497.  
  498.     SMTP.Abort;
  499.     lSmtpStatus.Caption := 'Failed on connect';
  500.   end;
  501.  
  502.   mSmtpResponse.Lines.Text := SMTP.LastResponse;
  503.   Screen.Cursor := crDefault;
  504. end;
  505.  
  506. procedure TForm1.bSmtpDisconnectClick(Sender: TObject);
  507. begin
  508.  
  509.   Screen.Cursor := crHourglass;
  510.  
  511.   if SMTP.Quit then
  512.   begin
  513.  
  514.     lSmtpStatus.Caption := 'Disconnected';
  515.   end
  516.   else
  517.   begin
  518.  
  519.     SMTP.Abort;
  520.     lSmtpStatus.Caption := 'Failed on quit';
  521.   end;
  522.  
  523.   mSmtpResponse.Lines.Text := SMTP.LastResponse;
  524.   bSmtpDisconnect.Enabled := False;
  525.   bSmtpConnect.Enabled := True;
  526.   bSend.Enabled := False;
  527.   Screen.Cursor := crDefault;
  528. end;
  529.  
  530. procedure TForm1.bSendClick(Sender: TObject);
  531. begin
  532.  
  533.   Screen.Cursor := crHourglass;
  534.  
  535.   if Msg.NeedRebuild then
  536.   begin
  537.  
  538.     lSmtpStatus.Caption := 'Message body needs rebuild';
  539.     Exit;
  540.   end;
  541.  
  542.   if SMTP.SendMessage then
  543.   begin
  544.  
  545.     lSmtpStatus.Caption := 'Message sent';
  546.   end
  547.   else
  548.   begin
  549.  
  550.     lSmtpStatus.Caption := 'Failed on send';
  551.   end;
  552.  
  553.   mSmtpResponse.Lines.Text := SMTP.LastResponse;
  554.   Screen.Cursor := crDefault;
  555. end;
  556.  
  557. procedure TForm1.bLoadMsgClick(Sender: TObject);
  558. begin
  559.  
  560.   if OpenDialog.Execute then
  561.   begin
  562.  
  563.     Screen.Cursor := crHourglass;
  564.     Msg.LoadFromFile(OpenDialog.FileName);
  565.     Screen.Cursor := crDefault;
  566.  
  567.     bRefreshClick(Sender);
  568.   end;
  569. end;
  570.  
  571. procedure TForm1.bRemoveClick(Sender: TObject);
  572. begin
  573.  
  574.   Screen.Cursor := crHourglass;
  575.   Msg.DetachFileIndex(lbFiles.ItemIndex);
  576.   Screen.Cursor := crDefault;
  577.   bRefreshClick(Sender);
  578. end;
  579.  
  580. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  581. begin
  582.  
  583.   if POP.SessionConnected or SMTP.SessionConnected then Action := caNone;
  584. end;
  585.  
  586. procedure TForm1.POPProgress(Sender: TObject; Total, Current: Integer);
  587. begin
  588.  
  589.   ProgressBar1.Max := Total;
  590.   ProgressBar1.Position := Current;
  591. end;
  592.  
  593. procedure TForm1.MsgProgress(Sender: TObject; Total, Current: Integer);
  594. begin
  595.  
  596.   ProgressBar2.Max := Total;
  597.   ProgressBar2.Position := Current;
  598. end;
  599.  
  600. procedure TForm1.SMTPProgress(Sender: TObject; Total, Current: Integer);
  601. begin
  602.  
  603.   ProgressBar3.Max := Total;
  604.   ProgressBar3.Position := Current;
  605. end;
  606.  
  607. procedure TForm1.bPlainRemoveClick(Sender: TObject);
  608. begin
  609.  
  610.   Screen.Cursor := crHourglass;
  611.   Msg.RemoveTextPlain;
  612.   Screen.Cursor := crDefault;
  613.   bRefreshClick(Sender);
  614. end;
  615.  
  616. procedure TForm1.bHtmlRemoveClick(Sender: TObject);
  617. begin
  618.  
  619.   Screen.Cursor := crHourglass;
  620.   Msg.RemoveTextHTML;
  621.   Screen.Cursor := crDefault;
  622.   bRefreshClick(Sender);
  623. end;
  624.  
  625. procedure TForm1.bAddToClick(Sender: TObject);
  626. begin
  627.  
  628.   mToNames.Items.Add(eToName.Text);
  629.   mToAddresses.Items.Add(eToAddress.Text);
  630.   eToName.Text := '';
  631.   eToAddress.Text := '';
  632. end;
  633.  
  634. procedure TForm1.bAddCcClick(Sender: TObject);
  635. begin
  636.  
  637.   mCcNames.Items.Add(eToName.Text);
  638.   mCcAddresses.Items.Add(eToAddress.Text);
  639.   eToName.Text := '';
  640.   eToAddress.Text := '';
  641. end;
  642.  
  643. procedure TForm1.bClearToClick(Sender: TObject);
  644. begin
  645.  
  646.   mToNames.Clear;
  647.   mToAddresses.Clear;
  648. end;
  649.  
  650. procedure TForm1.bClearCcClick(Sender: TObject);
  651. begin
  652.  
  653.   mCcNames.Clear;
  654.   mCcAddresses.Clear;
  655. end;
  656.  
  657. procedure TForm1.mToNamesClick(Sender: TObject);
  658. begin
  659.  
  660.   mToAddresses.ItemIndex := mToNames.ItemIndex;
  661. end;
  662.  
  663. procedure TForm1.mToAddressesClick(Sender: TObject);
  664. begin
  665.  
  666.   mToNames.ItemIndex := mToAddresses.ItemIndex;
  667. end;
  668.  
  669. procedure TForm1.mCcNamesClick(Sender: TObject);
  670. begin
  671.  
  672.   mCcAddresses.ItemIndex := mCcNames.ItemIndex;
  673. end;
  674.  
  675. procedure TForm1.mCcAddressesClick(Sender: TObject);
  676. begin
  677.  
  678.   mCcNames.ItemIndex := mCcAddresses.ItemIndex;
  679. end;
  680.  
  681. procedure TForm1.bNormalizeClick(Sender: TObject);
  682. begin
  683.  
  684.   Msg.AddHop('somewhere', 'mail2000', '', '');
  685.   Msg.Normalize;
  686.   bRefreshClick(Sender);
  687. end;
  688.  
  689. procedure TForm1.bDeleteClick(Sender: TObject);
  690. begin
  691.  
  692.   Screen.Cursor := crHourglass;
  693.  
  694.   if POP.DeleteMessage(StrToInt(eMsgNum.Text)) then
  695.   begin
  696.  
  697.     mResponse.Lines.Text := Copy(POP.LastResponse, 1, 10000);
  698.     Screen.Cursor := crDefault;
  699.   end
  700.   else
  701.   begin
  702.  
  703.     ShowMessage('Failed on delete');
  704.     Screen.Cursor := crDefault;
  705.   end;
  706. end;
  707.  
  708. procedure TForm1.bUIDLClick(Sender: TObject);
  709. begin
  710.  
  711.   Screen.Cursor := crHourglass;
  712.   POP.GetUIDL(StrToInt(eMsgNum.Text));
  713.   mResponse.Lines.Text := Copy(POP.LastResponse, 1, 10000);
  714.   Screen.Cursor := crDefault;
  715. end;
  716.  
  717. procedure TForm1.bAbortClick(Sender: TObject);
  718. begin
  719.  
  720.   Screen.Cursor := crHourglass;
  721.   POP.Abort;
  722.   lStatus.Caption := 'Aborted';
  723.   bDisconnect.Enabled := False;
  724.   bRetrieve.Enabled := False;
  725.   bDelete.Enabled := False;
  726.   bUIDL.Enabled := False;
  727.   bConnect.Enabled := True;
  728.   mResponse.Lines.Text := '';
  729.   Screen.Cursor := crDefault;
  730. end;
  731.  
  732. procedure TForm1.bSmtpAbortClick(Sender: TObject);
  733. begin
  734.  
  735.   Screen.Cursor := crHourglass;
  736.   SMTP.Abort;
  737.   mSmtpResponse.Lines.Text := '';
  738.   bSmtpDisconnect.Enabled := False;
  739.   bSmtpConnect.Enabled := True;
  740.   bSend.Enabled := False;
  741.   lSmtpStatus.Caption := 'Aborted';
  742.   Screen.Cursor := crDefault;
  743. end;
  744.  
  745. procedure TForm1.bFindPartsClick(Sender: TObject);
  746. begin
  747.  
  748.   Screen.Cursor := crHourglass;
  749.   Msg.FindParts;
  750.   bRefreshClick(Sender);
  751.   Screen.Cursor := crDefault;
  752. end;
  753.  
  754. end.
  755.