Settings_SmtpServer.pas
上传用户:dh8233980
上传日期:2014-10-16
资源大小:1015k
文件大小:8k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit Settings_SmtpServer;
  2. (******************************************************************************)
  3. (*                                                                            *)
  4. (* Hermes Smtp Server Settings Dialog Box                                     *)
  5. (* Part of Hermes SMTP/POP3 Server.                                           *)
  6. (* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide.    *)
  7. (*                                                                            *)
  8. (* Created January 10, 2000 by Alexander J. Fanti.  See License.txt           *)
  9. (*                                                                            *)
  10. (* Used by: Main                                                              *)
  11. (* Uses: DataU1, WSocket                                                      *)
  12. (*                                                                            *)
  13. (* Description: This Modal dialog window allows the user to change Smtp       *)
  14. (*              server settings                                               *)
  15. (*                                                                            *)
  16. (* Revisions: 1/21/2000  AJF  Commented                                       *)
  17. (*            2/12/2000  AJF  Added Interface to manage Smtp Server access    *)
  18. (*                            control (for anti-spam)                         *)
  19. (*            2/13/2000  AJF  Re-worked interface for new, more intuitive     *)
  20. (*                            controls                                        *)
  21. (*                                                                            *)
  22. (******************************************************************************)
  23. interface
  24. uses
  25.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  26.   StdCtrls, Buttons, Spin, FileCtrl, ShellAPI, ShlObj, ComObj, Menus,
  27.   ComCtrls;
  28. type
  29.   TfrmSettings_SmtpServer = class(TForm)
  30.     btnOK: TBitBtn;
  31.     btnCancel: TBitBtn;
  32.     popupDomains: TPopupMenu;
  33.     puDomainsAdd: TMenuItem;
  34.     puDomainsDelete: TMenuItem;
  35.     PageControl1: TPageControl;
  36.     tsGeneral: TTabSheet;
  37.     Label2: TLabel;
  38.     lstAddress: TComboBox;
  39.     spePort: TSpinEdit;
  40.     Label3: TLabel;
  41.     Label5: TLabel;
  42.     Label4: TLabel;
  43.     lstDomains: TListBox;
  44.     popupAcceptedDomains: TPopupMenu;
  45.     pu_AcceptedDomains_Add: TMenuItem;
  46.     pu_AcceptedDomains_Delete: TMenuItem;
  47.     tsAccess2: TTabSheet;
  48.     btnBanning: TButton;
  49.     GroupBox1: TGroupBox;
  50.     cbxRestrictAccess: TCheckBox;
  51.     lblNoRelayOff: TLabel;
  52.     lblNoRelayOn: TLabel;
  53.     Label1: TLabel;
  54.     lstAcceptedDomains: TListBox;
  55.     Label7: TLabel;
  56.     Label8: TLabel;
  57.     Label6: TLabel;
  58.     Label9: TLabel;
  59.     lblConnectionInactivityTimeout: TLabel;
  60.     speInactivityTimeout: TSpinEdit;
  61.     procedure FormShow(Sender: TObject);
  62.     procedure btnOKClick(Sender: TObject);
  63.     procedure puDomainsAddClick(Sender: TObject);
  64.     procedure puDomainsDeleteClick(Sender: TObject);
  65.     procedure popupDomainsPopup(Sender: TObject);
  66.     procedure pu_AcceptedDomains_AddClick(Sender: TObject);
  67.     procedure pu_AcceptedDomains_DeleteClick(Sender: TObject);
  68.     procedure popupAcceptedDomainsPopup(Sender: TObject);
  69.     procedure cbxRestrictAccessClick(Sender: TObject);
  70.     procedure btnBanningClick(Sender: TObject);
  71.   private
  72.     { Private declarations }
  73.   public
  74.     { Public declarations }
  75.   end;
  76. var
  77.   frmSettings_SmtpServer: TfrmSettings_SmtpServer;
  78. implementation
  79. uses DataU1, WSocket, Settings_SmtpServerAccessControl;
  80. {$R *.DFM}
  81. procedure TfrmSettings_SmtpServer.FormShow(Sender: TObject);
  82. var
  83.   x : Longint;
  84. begin
  85.   PageControl1.ActivePage := tsGeneral;
  86.   // General Tab
  87.   // List available IP addresses (or ANY)
  88.   lstAddress.Clear;
  89.   lstAddress.Items.Add('*** Any ***');
  90.   for x := 0 to LocalIPList.Count -1 do
  91.     lstAddress.Items.Add(LocalIPList[x]);
  92.   // Populate Dialog with Setting Information
  93.   lstAddress.ItemIndex := 0;
  94.   for x := 0 to lstAddress.Items.Count -1 do
  95.     if INI.Smtp_BindAddress = lstAddress.Items[x] then
  96.       lstAddress.ItemIndex := x;
  97.   spePort.Value := INI.Smtp_Port;
  98.   speInactivityTimeout.Value := INI.Smtp_InactivityTimeout;
  99.   lstDomains.Clear;
  100.   for x := 0 to INI.Smtp_Domains.Count -1 do
  101.     lstDomains.Items.Add(INI.Smtp_Domains[x]);
  102.   // Access Control Tab
  103.   lstAcceptedDomains.Clear;
  104.   for x := 0 to INI.Smtp_Access_AcceptedDomains.Count -1 do
  105.     lstAcceptedDomains.Items.Add(INI.Smtp_Access_AcceptedDomains[x]);
  106.   cbxRestrictAccess.Checked := INI.Smtp_Access_Restricted;
  107.   lblNoRelayOff.Visible := not cbxRestrictAccess.Checked;
  108.   lblNoRelayOn.Visible := cbxRestrictAccess.Checked;
  109. end;
  110. procedure TfrmSettings_SmtpServer.btnOKClick(Sender: TObject);
  111. begin
  112.   // Retrieve Settings from Dialog
  113.   // Save General Settings
  114.   if lstAddress.ItemIndex = 0 then INI.Smtp_BindAddress := '0.0.0.0'
  115.     else INI.Smtp_BindAddress := lstAddress.Items[lstAddress.ItemIndex];
  116.   INI.Smtp_Port        := spePort.Value;
  117.   INI.Smtp_InactivityTimeout := speInactivityTimeout.Value;
  118.   INI.SetSmtp_Domains(lstDomains.Items);
  119.   // Save Access Control
  120.   INI.SetSmtp_Access_AcceptedDomains(lstAcceptedDomains.Items);
  121.   INI.Smtp_Access_Restricted := cbxRestrictAccess.Checked
  122. end;
  123. procedure TfrmSettings_SmtpServer.popupDomainsPopup(Sender: TObject);
  124. begin
  125.   // Enable Domain list popum menu items
  126.   puDomainsDelete.Enabled := lstDomains.SelCount > 0;
  127. end;
  128. procedure TfrmSettings_SmtpServer.puDomainsAddClick(Sender: TObject);
  129. var
  130.   NewDomain : String;
  131.   x : Longint;
  132.   Found : Boolean;
  133. begin
  134.   // Add a new domain to the Domains list
  135.   NewDomain := Trim(InputBox('Add Local Domain', 'Domain', ''));
  136.   if NewDomain <> '' then begin
  137.     Found := False;
  138.     for x := 0 to lstDomains.Items.Count -1 do
  139.       if LowerCase(NewDomain) = LowerCase(lstDomains.Items[x]) then
  140.         Found := True;
  141.     if not Found then lstDomains.Items.Add(NewDomain);
  142.   end;
  143. end;
  144. procedure TfrmSettings_SmtpServer.puDomainsDeleteClick(Sender: TObject);
  145. var
  146.   x : Longint;
  147. begin
  148.   // remove domains from the domain list
  149.   for x := lstDomains.Items.Count -1 downto 0 do
  150.     if lstDomains.Selected[x] then lstDomains.Items.Delete(x);
  151. end;
  152. procedure TfrmSettings_SmtpServer.popupAcceptedDomainsPopup(
  153.   Sender: TObject);
  154. begin
  155.   // Enable Domain list popum menu items
  156.   pu_AcceptedDomains_Delete.Enabled := lstAcceptedDomains.SelCount > 0;
  157. end;
  158. procedure TfrmSettings_SmtpServer.pu_AcceptedDomains_AddClick(
  159.   Sender: TObject);
  160. var
  161.   NewDomain : String;
  162.   x : Longint;
  163.   Found : Boolean;
  164. begin
  165.   // Add a new domain to the Domains list
  166.   NewDomain := Trim(InputBox('Add Accepted Domain', 'Domain', ''));
  167.   if NewDomain <> '' then begin
  168.     Found := False;
  169.     for x := 0 to lstAcceptedDomains.Items.Count -1 do
  170.       if LowerCase(NewDomain) = LowerCase(lstAcceptedDomains.Items[x]) then
  171.         Found := True;
  172.     if not Found then lstAcceptedDomains.Items.Add(NewDomain);
  173.   end;
  174. end;
  175. procedure TfrmSettings_SmtpServer.pu_AcceptedDomains_DeleteClick(
  176.   Sender: TObject);
  177. var
  178.   x : Longint;
  179. begin
  180.   // remove domains from the domain list
  181.   for x := lstAcceptedDomains.Items.Count -1 downto 0 do
  182.     if lstAcceptedDomains.Selected[x] then lstAcceptedDomains.Items.Delete(x);
  183. end;
  184. procedure TfrmSettings_SmtpServer.cbxRestrictAccessClick(Sender: TObject);
  185. begin
  186.   lblNoRelayOff.Visible := not cbxRestrictAccess.Checked;
  187.   lblNoRelayOn.Visible := cbxRestrictAccess.Checked;
  188. end;
  189. procedure TfrmSettings_SmtpServer.btnBanningClick(Sender: TObject);
  190. begin
  191.   frmSettings_SmtpServerAccessControl.ShowModal;
  192. end;
  193. end.