www.pudn.com > EmailServer.zip > Settings_SmtpServer.pas
unit Settings_SmtpServer;
(******************************************************************************)
(* *)
(* Hermes Smtp Server Settings Dialog Box *)
(* Part of Hermes SMTP/POP3 Server. *)
(* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide. *)
(* *)
(* Created January 10, 2000 by Alexander J. Fanti. See License.txt *)
(* *)
(* Used by: Main *)
(* Uses: DataU1, WSocket *)
(* *)
(* Description: This Modal dialog window allows the user to change Smtp *)
(* server settings *)
(* *)
(* Revisions: 1/21/2000 AJF Commented *)
(* 2/12/2000 AJF Added Interface to manage Smtp Server access *)
(* control (for anti-spam) *)
(* 2/13/2000 AJF Re-worked interface for new, more intuitive *)
(* controls *)
(* *)
(******************************************************************************)
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Spin, FileCtrl, ShellAPI, ShlObj, ComObj, Menus,
ComCtrls;
type
TfrmSettings_SmtpServer = class(TForm)
btnOK: TBitBtn;
btnCancel: TBitBtn;
popupDomains: TPopupMenu;
puDomainsAdd: TMenuItem;
puDomainsDelete: TMenuItem;
PageControl1: TPageControl;
tsGeneral: TTabSheet;
Label2: TLabel;
lstAddress: TComboBox;
spePort: TSpinEdit;
Label3: TLabel;
Label5: TLabel;
Label4: TLabel;
lstDomains: TListBox;
popupAcceptedDomains: TPopupMenu;
pu_AcceptedDomains_Add: TMenuItem;
pu_AcceptedDomains_Delete: TMenuItem;
tsAccess2: TTabSheet;
btnBanning: TButton;
GroupBox1: TGroupBox;
cbxRestrictAccess: TCheckBox;
lblNoRelayOff: TLabel;
lblNoRelayOn: TLabel;
Label1: TLabel;
lstAcceptedDomains: TListBox;
Label7: TLabel;
Label8: TLabel;
Label6: TLabel;
Label9: TLabel;
lblConnectionInactivityTimeout: TLabel;
speInactivityTimeout: TSpinEdit;
procedure FormShow(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure puDomainsAddClick(Sender: TObject);
procedure puDomainsDeleteClick(Sender: TObject);
procedure popupDomainsPopup(Sender: TObject);
procedure pu_AcceptedDomains_AddClick(Sender: TObject);
procedure pu_AcceptedDomains_DeleteClick(Sender: TObject);
procedure popupAcceptedDomainsPopup(Sender: TObject);
procedure cbxRestrictAccessClick(Sender: TObject);
procedure btnBanningClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmSettings_SmtpServer: TfrmSettings_SmtpServer;
implementation
uses DataU1, WSocket, Settings_SmtpServerAccessControl;
{$R *.DFM}
procedure TfrmSettings_SmtpServer.FormShow(Sender: TObject);
var
x : Longint;
begin
PageControl1.ActivePage := tsGeneral;
// General Tab
// List available IP addresses (or ANY)
lstAddress.Clear;
lstAddress.Items.Add('*** Any ***');
for x := 0 to LocalIPList.Count -1 do
lstAddress.Items.Add(LocalIPList[x]);
// Populate Dialog with Setting Information
lstAddress.ItemIndex := 0;
for x := 0 to lstAddress.Items.Count -1 do
if INI.Smtp_BindAddress = lstAddress.Items[x] then
lstAddress.ItemIndex := x;
spePort.Value := INI.Smtp_Port;
speInactivityTimeout.Value := INI.Smtp_InactivityTimeout;
lstDomains.Clear;
for x := 0 to INI.Smtp_Domains.Count -1 do
lstDomains.Items.Add(INI.Smtp_Domains[x]);
// Access Control Tab
lstAcceptedDomains.Clear;
for x := 0 to INI.Smtp_Access_AcceptedDomains.Count -1 do
lstAcceptedDomains.Items.Add(INI.Smtp_Access_AcceptedDomains[x]);
cbxRestrictAccess.Checked := INI.Smtp_Access_Restricted;
lblNoRelayOff.Visible := not cbxRestrictAccess.Checked;
lblNoRelayOn.Visible := cbxRestrictAccess.Checked;
end;
procedure TfrmSettings_SmtpServer.btnOKClick(Sender: TObject);
begin
// Retrieve Settings from Dialog
// Save General Settings
if lstAddress.ItemIndex = 0 then INI.Smtp_BindAddress := '0.0.0.0'
else INI.Smtp_BindAddress := lstAddress.Items[lstAddress.ItemIndex];
INI.Smtp_Port := spePort.Value;
INI.Smtp_InactivityTimeout := speInactivityTimeout.Value;
INI.SetSmtp_Domains(lstDomains.Items);
// Save Access Control
INI.SetSmtp_Access_AcceptedDomains(lstAcceptedDomains.Items);
INI.Smtp_Access_Restricted := cbxRestrictAccess.Checked
end;
procedure TfrmSettings_SmtpServer.popupDomainsPopup(Sender: TObject);
begin
// Enable Domain list popum menu items
puDomainsDelete.Enabled := lstDomains.SelCount > 0;
end;
procedure TfrmSettings_SmtpServer.puDomainsAddClick(Sender: TObject);
var
NewDomain : String;
x : Longint;
Found : Boolean;
begin
// Add a new domain to the Domains list
NewDomain := Trim(InputBox('Add Local Domain', 'Domain', ''));
if NewDomain <> '' then begin
Found := False;
for x := 0 to lstDomains.Items.Count -1 do
if LowerCase(NewDomain) = LowerCase(lstDomains.Items[x]) then
Found := True;
if not Found then lstDomains.Items.Add(NewDomain);
end;
end;
procedure TfrmSettings_SmtpServer.puDomainsDeleteClick(Sender: TObject);
var
x : Longint;
begin
// remove domains from the domain list
for x := lstDomains.Items.Count -1 downto 0 do
if lstDomains.Selected[x] then lstDomains.Items.Delete(x);
end;
procedure TfrmSettings_SmtpServer.popupAcceptedDomainsPopup(
Sender: TObject);
begin
// Enable Domain list popum menu items
pu_AcceptedDomains_Delete.Enabled := lstAcceptedDomains.SelCount > 0;
end;
procedure TfrmSettings_SmtpServer.pu_AcceptedDomains_AddClick(
Sender: TObject);
var
NewDomain : String;
x : Longint;
Found : Boolean;
begin
// Add a new domain to the Domains list
NewDomain := Trim(InputBox('Add Accepted Domain', 'Domain', ''));
if NewDomain <> '' then begin
Found := False;
for x := 0 to lstAcceptedDomains.Items.Count -1 do
if LowerCase(NewDomain) = LowerCase(lstAcceptedDomains.Items[x]) then
Found := True;
if not Found then lstAcceptedDomains.Items.Add(NewDomain);
end;
end;
procedure TfrmSettings_SmtpServer.pu_AcceptedDomains_DeleteClick(
Sender: TObject);
var
x : Longint;
begin
// remove domains from the domain list
for x := lstAcceptedDomains.Items.Count -1 downto 0 do
if lstAcceptedDomains.Selected[x] then lstAcceptedDomains.Items.Delete(x);
end;
procedure TfrmSettings_SmtpServer.cbxRestrictAccessClick(Sender: TObject);
begin
lblNoRelayOff.Visible := not cbxRestrictAccess.Checked;
lblNoRelayOn.Visible := cbxRestrictAccess.Checked;
end;
procedure TfrmSettings_SmtpServer.btnBanningClick(Sender: TObject);
begin
frmSettings_SmtpServerAccessControl.ShowModal;
end;
end.