diff --git a/Targets/Mailstats/Mailstats-Custom.pm b/Targets/Mailstats/Mailstats-Custom.pm
new file mode 100644
index 0000000..4bb573e
--- /dev/null
+++ b/Targets/Mailstats/Mailstats-Custom.pm
@@ -0,0 +1,215 @@
+#
+# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 12:46:00
+#
+#
+# Routines to be edited by the developer to provide content and validation for parameters
+# and provison of the control data for table(s)
+#
+use esmith::util;
+use esmith::util::network;
+use esmith::ConfigDB;
+use esmith::HostsDB;
+use esmith::AccountsDB;
+use esmith::NetworksDB;
+use esmith::DomainsDB;
+
+use constant FALSE => 0;
+use constant TRUE => 1;
+
+
+#The most common ones
+#my $cdb
+#my $adb
+#my $ndb
+#my $hdb
+#my $ddb
+
+# Validation routines - parameters for each panel
+
+ sub validate_TABLE {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ # Validation for each field
+ my $ret = "";
+
+ if (! TRUE) #validate $c->param('StatsDate')
+ {$ret .= 'Validation for StatsDate failed';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+ sub validate_CONFIG {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ # Validation for each field
+ my $ret = "";
+
+ if (! TRUE) #validate $c->param('TextorHTML')
+ {$ret .= 'Validation for TextorHTML failed';}
+ if (! TRUE) #validate $c->param('Email')
+ {$ret .= 'Validation for Email failed';}
+ if (! TRUE) #validate $c->param('EmailHost')
+ {$ret .= 'Validation for EmailHost failed';}
+ if (! TRUE) #validate $c->param('EmailUser')
+ {$ret .= 'Validation for EmailUser failed';}
+ if (! TRUE) #validate $c->param('DBSave')
+ {$ret .= 'Validation for DBSave failed';}
+ if (! TRUE) #validate $c->param('DBHost')
+ {$ret .= 'Validation for DBHost failed';}
+ if (! TRUE) #validate $c->param('DBUser')
+ {$ret .= 'Validation for DBUser failed';}
+ if (! TRUE) #validate $c->param('CountrySelect')
+ {$ret .= 'Validation for CountrySelect failed';}
+ if (! TRUE) #validate $c->param('AccumCountryCodes')
+ {$ret .= 'Validation for AccumCountryCodes failed';}
+ if (! TRUE) #validate $c->param('EnableRHSBL')
+ {$ret .= 'Validation for EnableRHSBL failed';}
+ if (! TRUE) #validate $c->param('EnableRHSBL')
+ {$ret .= 'Validation for EnableRHSBL failed';}
+ if (! TRUE) #validate $c->param('RBLLIST')
+ {$ret .= 'Validation for RBLLIST failed';}
+ if (! TRUE) #validate $c->param('SBLLIST')
+ {$ret .= 'Validation for SBLLIST failed';}
+ if (! TRUE) #validate $c->param('UBLLIST')
+ {$ret .= 'Validation for UBLLIST failed';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+
+# Get singleton data for each panel
+
+ sub get_data_for_panel_TABLE {
+ # Return a hash with the fields required which will be loaded into the shared data
+ my $c = shift;
+ my %ret = (
+ 'Data1'=>'Data for TABLE', #Example
+ # fields from Inputs in TABLE $fields['TABLE']
+ 'StatsDate'=>'StatsDate contents',
+
+ );
+ return %ret;
+ }
+
+ sub get_data_for_panel_CONFIG {
+ # Return a hash with the fields required which will be loaded into the shared data
+ my $c = shift;
+ my %ret = (
+ 'Data1'=>'Data for CONFIG', #Example
+ # fields from Inputs in CONFIG $fields['CONFIG']
+ 'TextorHTML'=>'TextorHTML contents',
+ 'Email'=>'Email contents',
+ 'EmailHost'=>'EmailHost contents',
+ 'EmailUser'=>'EmailUser contents',
+ 'DBSave'=>'DBSave contents',
+ 'DBHost'=>'DBHost contents',
+ 'DBUser'=>'DBUser contents',
+ 'CountrySelect'=>'CountrySelect contents',
+ 'AccumCountryCodes'=>'AccumCountryCodes contents',
+ 'EnableRHSBL'=>'EnableRHSBL contents',
+ 'EnableRHSBL'=>'EnableRHSBL contents',
+ 'RBLLIST'=>'RBLLIST contents',
+ 'SBLLIST'=>'SBLLIST contents',
+ 'UBLLIST'=>'UBLLIST contents',
+
+ );
+ return %ret;
+ }
+
+
+
+# Get control data for table(s)
+
+
+
+# Return hash with values from row in which link clicked on table
+
+ sub get_selected_TABLE {
+ my $c = shift;
+ my $selected = shift; #Parameter is name of selected row.
+ my $is_new_record = shift; #Indicates new record required (defaults)
+ my %ret = {};
+ return %ret;
+ }
+
+ sub get_selected_CONFIG {
+ my $c = shift;
+ my $selected = shift; #Parameter is name of selected row.
+ my $is_new_record = shift; #Indicates new record required (defaults)
+ my %ret = {};
+ return %ret;
+ }
+
+
+#after sucessful modify or create or whatever and submit then perfom (if the params validate)
+
+ sub perform_TABLE {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ my $ret = "";
+ my $db = $cdb; #maybe one of the others
+ my $dbkey = 'ChangeThis';
+ # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
+
+ if (! TRUE) #copy or perform with value: StatsDate e.g. $db->set_prop($dbkey,'StatsDate',$c->param('StatsDate'),type=>'service'))
+ {$ret .= 'Perform/save failed for StatsDate';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+ sub perform_CONFIG {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ my $ret = "";
+ my $db = $cdb; #maybe one of the others
+ my $dbkey = 'ChangeThis';
+ # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
+
+ if (! TRUE) #copy or perform with value: TextorHTML e.g. $db->set_prop($dbkey,'TextorHTML',$c->param('TextorHTML'),type=>'service'))
+ {$ret .= 'Perform/save failed for TextorHTML';}
+ if (! TRUE) #copy or perform with value: Email e.g. $db->set_prop($dbkey,'Email',$c->param('Email'),type=>'service'))
+ {$ret .= 'Perform/save failed for Email';}
+ if (! TRUE) #copy or perform with value: EmailHost e.g. $db->set_prop($dbkey,'EmailHost',$c->param('EmailHost'),type=>'service'))
+ {$ret .= 'Perform/save failed for EmailHost';}
+ if (! TRUE) #copy or perform with value: EmailUser e.g. $db->set_prop($dbkey,'EmailUser',$c->param('EmailUser'),type=>'service'))
+ {$ret .= 'Perform/save failed for EmailUser';}
+ if (! TRUE) #copy or perform with value: DBSave e.g. $db->set_prop($dbkey,'DBSave',$c->param('DBSave'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBSave';}
+ if (! TRUE) #copy or perform with value: DBHost e.g. $db->set_prop($dbkey,'DBHost',$c->param('DBHost'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBHost';}
+ if (! TRUE) #copy or perform with value: DBUser e.g. $db->set_prop($dbkey,'DBUser',$c->param('DBUser'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBUser';}
+ if (! TRUE) #copy or perform with value: CountrySelect e.g. $db->set_prop($dbkey,'CountrySelect',$c->param('CountrySelect'),type=>'service'))
+ {$ret .= 'Perform/save failed for CountrySelect';}
+ if (! TRUE) #copy or perform with value: AccumCountryCodes e.g. $db->set_prop($dbkey,'AccumCountryCodes',$c->param('AccumCountryCodes'),type=>'service'))
+ {$ret .= 'Perform/save failed for AccumCountryCodes';}
+ if (! TRUE) #copy or perform with value: EnableRHSBL e.g. $db->set_prop($dbkey,'EnableRHSBL',$c->param('EnableRHSBL'),type=>'service'))
+ {$ret .= 'Perform/save failed for EnableRHSBL';}
+ if (! TRUE) #copy or perform with value: EnableRHSBL e.g. $db->set_prop($dbkey,'EnableRHSBL',$c->param('EnableRHSBL'),type=>'service'))
+ {$ret .= 'Perform/save failed for EnableRHSBL';}
+ if (! TRUE) #copy or perform with value: RBLLIST e.g. $db->set_prop($dbkey,'RBLLIST',$c->param('RBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for RBLLIST';}
+ if (! TRUE) #copy or perform with value: SBLLIST e.g. $db->set_prop($dbkey,'SBLLIST',$c->param('SBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for SBLLIST';}
+ if (! TRUE) #copy or perform with value: UBLLIST e.g. $db->set_prop($dbkey,'UBLLIST',$c->param('UBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for UBLLIST';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+
+sub create_link{
+ # WIP
+ my ($c,$route, $panel, $index) = @_;
+ my $link = "$route?trt=$panel&Selected=$index";
+ return $link;
+}
+
+sub get_StatsDate{
+ return ['yesterday']
+}
+
+sub get_CountrCodes{
+ return ['UK']
+}
+1;
\ No newline at end of file
diff --git a/Targets/Mailstats/Mailstats.pm b/Targets/Mailstats/Mailstats.pm
new file mode 100644
index 0000000..b4d9ae2
--- /dev/null
+++ b/Targets/Mailstats/Mailstats.pm
@@ -0,0 +1,315 @@
+package SrvMngr::Controller::Mailstats;
+#
+# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+#
+#----------------------------------------------------------------------
+# heading : Investigation
+# description : Mailstats
+# navigation : 4000 700
+#
+# name : mailstats, method : get, url : /mailstats, ctlact : Mailstats#main
+# name : mailstatsu, method : post, url : /mailstatsu, ctlact : Mailstats#do_update
+# name : mailstatsd, method : get, url : /mailstatsd, ctlact : Mailstats#do_display
+#
+# routes : end
+#
+# Documentation: https://wiki.contribs.org/Mailstats
+#----------------------------------------------------------------------
+
+#
+# Scheme of things:
+#
+# TBA!!
+
+use strict;
+use warnings;
+use Mojo::Base 'Mojolicious::Controller';
+
+use constant FALSE => 0;
+use constant TRUE => 1;
+
+use Locale::gettext;
+use SrvMngr::I18N;
+use SrvMngr qw(theme_list init_session);
+
+use Data::Dumper;
+
+use esmith::util;
+use esmith::util::network;
+use esmith::ConfigDB;
+use esmith::AccountsDB;
+use esmith::NetworksDB;
+use esmith::HostsDB;
+use esmith::DomainsDB;
+
+my $cdb;
+my $adb;
+my $ndb;
+my $hdb;
+my $ddb;
+
+require '/usr/share/smanager/lib/SrvMngr/Controller/Mailstats-Custom.pm'; #The code that is to be added by the developer
+
+sub main {
+#
+# Initial entry - route is "/
+ %=l('mst_Specify_if_you_would_like')
+
+ % my @TextorHTML_options = [['HTML' => 'HTML'], ['Text' => 'Text'], ['Both' => 'Both'], ['Neither' => 'Neither']];
+ % param 'TextorHTML' => $mst_data->{TextorHTML} unless param 'TextorHTML';
+ %= select_field 'TextorHTML' => @TextorHTML_options, class => 'input', id => 'TextorHTML_select'
+
+ %=l('mst_Email_for_stats')
+
+ % param 'Email' => $mst_data->{Email} unless param 'Email';
+ %=email_field 'Email', class => 'emai3'
+
+ %=l('mst_Hostname_for_email_server')
+
+ % param 'EmailHost' => $mst_data->{EmailHost} unless param 'EmailHost';
+ %= text_field 'EmailHost', size => '50', class => 'textinput EmailHost' , pattern=>'.*' , placeholder=>'EmailHost', title =>'Pattern regex mismatch'
+
+ %=l('mst_Port_number_for_email_server')
+
+ % param 'EmailPort' => $mst_data->{EmailPort} unless param 'EmailPort';
+ %=number_field 'EmailPort', class => 'numb6'
+
+ %=l('mst_User_name_for_email_sending')
+
+ % param 'EmailUser' => $mst_data->{EmailUser} unless param 'EmailUser';
+ %= text_field 'EmailUser', size => '50', class => 'textinput EmailUser' , pattern=>'.*' , placeholder=>'EmailUser', title =>'Pattern regex mismatch'
+
+ %=l('mst_User_Password_for_email_sending')
+
+ % param 'EmailPassword' => $mst_data->{EmailPassword} unless param 'EmailPassword';
+ %=password_field 'EmailPassword', class => 'pass8 sme-password', autocomplete => 'off'
+
+ %=l('mst_Would_you_like_to_save')
+
+ % my @DBSave_options = [['yes' => 'yes'], ['no' => 'no']];
+ % param 'DBSave' => $mst_data->{DBSave} unless param 'DBSave';
+ %= select_field 'DBSave' => @DBSave_options, class => 'input', id => 'DBSave_select'
+
+ %=l('mst_Hostname_for_DB_server')
+
+ % param 'DBHost' => $mst_data->{DBHost} unless param 'DBHost';
+ %= text_field 'DBHost', size => '50', class => 'textinput DBHost' , pattern=>'.*' , placeholder=>'DBHost', title =>'Pattern regex mismatch'
+
+ %=l('mst_Port_number_for_DB_server')
+
+ % param 'DBPort' => $mst_data->{DBPort} unless param 'DBPort';
+ %=number_field 'DBPort', class => 'numb11'
+
+ %=l('mst_User_name_for_DB_sending')
+
+ % param 'DBUser' => $mst_data->{DBUser} unless param 'DBUser';
+ %= text_field 'DBUser', size => '50', class => 'textinput DBUser' , pattern=>'.*' , placeholder=>'DBUser', title =>'Pattern regex mismatch'
+
+ %=l('mst_User_Password_for_DB_sending')
+
+ % param 'DBPassword' => $mst_data->{DBPassword} unless param 'DBPassword';
+ %=password_field 'DBPassword', class => 'pass13 sme-password', autocomplete => 'off'
+
+ %=l('mst_Select_the_countries_you_would')
+
+ % my @CountrySelect_options = [['$c->get_CountryCodes()' => '$c->get_CountryCodes()']];
+ % param 'CountrySelect' => $mst_data->{CountrySelect} unless param 'CountrySelect';
+ %= select_field 'CountrySelect' => @CountrySelect_options, class => 'input', id => 'CountrySelect_select'
+
+ %=l('mst_Accumlated_country_codes_(editable)')
+
+ % param 'AccumCountryCodes' => $mst_data->{AccumCountryCodes} unless param 'AccumCountryCodes';
+ %= text_field 'AccumCountryCodes', size => '50', class => 'textinput AccumCountryCodes' , pattern=>'.*' , placeholder=>'AccumCountryCodes', title =>'Pattern regex mismatch'
+
+ %=l('mst_Enable_RHSBL_checking')
+
+ % my @EnableRHSBL_options = [['yes' => 'yes'], ['no' => 'no']];
+ % param 'EnableRHSBL' => $mst_data->{EnableRHSBL} unless param 'EnableRHSBL';
+ %= select_field 'EnableRHSBL' => @EnableRHSBL_options, class => 'input', id => 'EnableRHSBL_select'
+
+ %=l('mst_Enable_DNSBL_checking')
+
+ % my @EnableDNSBL_options = [['yes' => 'yes'], ['no' => 'no']];
+ % param 'EnableDNSBL' => $mst_data->{EnableDNSBL} unless param 'EnableDNSBL';
+ %= select_field 'EnableDNSBL' => @EnableDNSBL_options, class => 'input', id => 'EnableDNSBL_select'
+
+ %=l('mst_RBL_Servers_to_use')
+
+ % param 'RBLLIST' => $mst_data->{RBLLIST} unless param 'RBLLIST';
+ %= text_field 'RBLLIST', size => '50', class => 'textinput RBLLIST' , pattern=>'.*' , placeholder=>'RBLLIST', title =>'Pattern regex mismatch'
+
+ %=l('mst_SBL_Servers_to_use')
+
+ % param 'SBLLIST' => $mst_data->{SBLLIST} unless param 'SBLLIST';
+ %= text_field 'SBLLIST', size => '50', class => 'textinput SBLLIST' , pattern=>'.*' , placeholder=>'SBLLIST', title =>'Pattern regex mismatch'
+
+ %=l('mst_UBL_Servers_to_use')
+
+ % param 'UBLLIST' => $mst_data->{UBLLIST} unless param 'UBLLIST';
+ %= text_field 'UBLLIST', size => '50', class => 'textinput UBLLIST' , pattern=>'.*' , placeholder=>'UBLLIST', title =>'Pattern regex mismatch'
+
+ %=l('mst_Score_over_which_email_will')
+
+ % param 'RejectLevel' => $mst_data->{RejectLevel} unless param 'RejectLevel';
+ %=number_field 'RejectLevel', class => 'numb21'
+
+ %=l('mst_Score_over_which_email_will')
+
+ % param 'TagLevel' => $mst_data->{TagLevel} unless param 'TagLevel';
+ %=number_field 'TagLevel', class => 'numb22'
+
+ %=l('mst_Descriptive_paragraph')
+
+ %=l('mst_Date_for_Stats_display')
+
+ % my @StatsDate_options = [['$c->get_StatsDate()' => '$c->get_StatsDate()']];
+ % param 'StatsDate' => $mst_data->{StatsDate} unless param 'StatsDate';
+ %= select_field 'StatsDate' => @StatsDate_options, class => 'input', id => 'StatsDate_select'
+
+ %=$c->render_to_string(inline =>$c->l($c->stash('first')))
+
+ %= $c->l($c->stash('success'));
+
+ %= $c->l($c->stash('error'));
+
+ %= dumper $mst_data
+
+ % }
+ % my $btn = l('mst_APPLY');
+ %= form_for "mailstatsu" => (method => 'POST') => begin
+ % param 'trt' => $mst_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $mst_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('mst_Email_details')%>
+
+
<%=l('mst_Details_for_connection_to_database')%>
+
+ <%=l('mst_Email_filtering_/_exclusion')%>
+
+
<%=l('mst_Spamassassin_parameters_for_rejecting_email')%>
+
+
+ %= dumper $mst_data
+
+ % }
+ % my $btn = l('mst_APPLY');
+ %= form_for "mailstatsu" => (method => 'POST') => begin
+ % param 'trt' => $mst_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $mst_data->{trt}
+ %# Inputs etc in here.
+
+
+
+
+ <%=l('mst_Table_of_email_status')%>
+
+
+ %= dumper $c->current_route
+ %= dumper $mst_data->{trt}
+
+ % }
+
+ <%=$title%>
+
+ % if ( stash('modul')) {
+ %= $c->render_to_string(inline => stash('modul') );
+ % }
+
+ %if ($c->stash('first')) {
+
+
+ %} elsif ($c->stash('error')) {
+
+ %}
+
+ %#Routing to partials according to trt parameter.
+ %#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
+
+ % if ($mst_data->{trt} eq "TABLE") {
+ %= include 'partials/_mst_TABLE'
+ %}
+
+ % if ($mst_data->{trt} eq "CONFIG") {
+ %= include 'partials/_mst_CONFIG'
+ %}
+
+
+
+
]]>
@@ -33,7 +33,7 @@
%=l('${prefix}_${Label}')
- %=time_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title = 'Pattern regex mismatch'
+ %=time_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title =>'Pattern regex mismatch'
]]>
@@ -43,7 +43,7 @@
%=l('${prefix}_${Label}')
% param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}';
- %= text_field '${Name}', size => '${size | 50}', class => 'textinput ${Name}' , pattern=>'${regexp | ".*"}' , placeholder=>'${placeholder | Name}', title = 'Pattern regex mismatch'
+ %= text_field '${Name}', size => '${size | 50}', class => 'textinput ${Name}' , pattern=>'${regexp | ".*"}' , placeholder=>'${placeholder | Name}', title =>'Pattern regex mismatch'
%= dumper $$${prefix}_datadiff --git a/json5/Mailstats.json5 b/json5/Mailstats.json5 new file mode 100644 index 0000000..d6b2413 --- /dev/null +++ b/json5/Mailstats.json5 @@ -0,0 +1,211 @@ +{ + PackageName: 'Mailstats', + prefix: 'mst', + MenuHeading: 'Investigation', + MenuDescription: 'Mailstats', + MenuNavigation: '4000 700', + firstPanel: 'TABLE', + signalEvent: 'smeserver-mailstats-update', + html: [ + {Name: 'Table', + route: 'TABLE', + Group1: 'class=inline-buttons', + Link1: { + Type: 'Link', + href: 'mailstatsd?trt=CONFIG', + title: 'Configure Mailstats' + }, + Endgroup1: '', + SubHeader1: 'Table of email status', + Paragraph1: 'Descriptive paragraph', + Input1: { + Name: 'StatsDate', + Type: 'Select', + Label: 'Date for Stats display', + Value: '', + Options: [{'Value':'$c->get_StatsDate()', + 'Text':'$c->get_StatsDate()'}] + }, + Input2:{ + Name:'StatsTable', + Type:'object', + url:'mailstats/$c->stash("url")' + } + }, + {Name: 'Configuration', + route: 'CONFIG', + Input4:{ + Name:'TextorHTML', + Type:'Select', + Label: 'Specify if you would like to receive email in text for HTML form', + Options: [ + { + 'Value': 'HTML', + 'Text': 'HTML' + }, + { + 'Value': 'Text', + 'Text': 'Text' + }, + { + 'Value': 'Both', + 'Text': 'Both' + }, + { + 'Value': 'Neither', + 'Text': 'Neither' + } + ] + }, + Group1:'class=emailwanted', + SubHeader:'Email details', + Input3:{ + Name:'Email', + Type:'Email', + Label:'Email for stats' + }, + Input5:{ + Name:'EmailHost', + Label:'Hostname for email server', + Type:'Text', + Value:'localhost' + }, + Input6:{ + Name:'EmailPort', + Label:'Port number for email server', + Type:'Number', + Value:'25' + }, + Input7:{ + Name:'EmailUser', + Type:'Text', + Label:'User name for email sending', + Value:'admin' + }, + Input8:{ + Name:'EmailPassword', + Type:'Password', + Label:'User Password for email sending', + Value:'' + }, + Endgroup1: '', + Input9:{ + Name:'DBSave', + Label:'Would you like to save data in the DB?', + Type:'Select', + Options: [ + { + 'Value': 'yes', + 'Text': 'yes' + }, + { + 'Value': 'no', + 'Text': 'no' + } + ] + }, + Group2:'class=dbwanted', + SubHeader2:'Details for connection to database for saving email status', + Input10:{ + Name:'DBHost', + Label:'Hostname for DB server', + Type:'Text', + Value:'localhost' + }, + Input11:{ + Name:'DBPort', + Label:'Port number for DB server', + Type:'Number', + Value:'25' + }, + Input12:{ + Name:'DBUser', + Type:'Text', + Label:'User name for DB sending', + Value:'admin' + }, + Input13:{ + Name:'DBPassword', + Type:'Password', + Label:'User Password for DB sending', + Value:'' + }, + Endgroup2: '', + SubHeader3: 'Email filtering / exclusion', + Input14:{ + Name:'CountrySelect', + Label:'Select the countries you would like to reject', + Type:'Select', + Options:[{'Value':'$c->get_CountryCodes()', + 'Text':'$c->get_CountryCodes()'}] + }, + Input15:{ + Name:'AccumCountryCodes', + Type:'Text', + Label:'Accumlated country codes (editable)', + Value:'' + }, + Input16:{ + Name:'EnableRHSBL', + Label:'Enable RHSBL checking', + Type:'Select', + Options: [ + { + 'Value': 'yes', + 'Text': 'yes' + }, + { + 'Value': 'no', + 'Text': 'no' + } + ] + }, + Input17:{ + Name:'EnableDNSBL', + Label:'Enable DNSBL checking', + Type:'Select', + Options: [ + { + 'Value': 'yes', + 'Text': 'yes' + }, + { + 'Value': 'no', + 'Text': 'no' + } + ] + }, + Input18:{ + Name:'RBLLIST', + Type:'Text', + Label:'RBL Servers to use', + Value:'' + }, + Input19:{ + Name:'SBLLIST', + Type:'Text', + Label:'SBL Servers to use', + Value:'' + }, + Input20:{ + Name:'UBLLIST', + Type:'Text', + Label:'UBL Servers to use', + Value:'' + }, + SubHeader4:'Spamassassin parameters for rejecting email', + Input21:{ + Name:'RejectLevel', + Label:'Score over which email will be fully rejected', + Type:'Number', + Value:'12' + }, + Input22:{ + Name:'TagLevel', + Label:'Score over which email will be tagged as spam, but queued', + Type:'Number', + Value:'4' + } + } + ] + } \ No newline at end of file