Net-FullAuto
view release on metacpan or search on metacpan
lib/Net/FullAuto/ISets/Local/EmailServer_is.pm view on Meta::CPAN
package Net::FullAuto::ISets::Local::EmailServer_is;
### OPEN SOURCE LICENSE - GNU AFFERO PUBLIC LICENSE Version 3.0 #######
#
# Net::FullAuto - Powerful Network Process Automation Software
# Copyright © 2000-2025 Brian M. Kelly
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or any later version.
#
# This program is distributed in the hope that it will be useful,
# but **WITHOUT ANY WARRANTY**; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License along with this program. If not, see:
# <http://www.gnu.org/licenses/agpl.html>.
#
#######################################################################
our $VERSION='0.01';
our $DISPLAY='Email Server';
our $CONNECT='secure';
use 5.005;
use strict;
use warnings;
my $service_and_cert_password='Full@ut0O1';
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($select_emailserver_setup);
use Net::FullAuto::Cloud::fa_amazon;
use Net::FullAuto::FA_Core qw[cleanup fetch clean_filehandle];
use Time::Local;
use File::HomeDir;
use URI::Escape::XS qw/uri_escape/;
use JSON::XS;
use Sys::Hostname;
my $tit='FullAuto.com';
my $adu='Administrator';
my $avail_port='';
my $hostname=Sys::Hostname::hostname;
my $home_dir=File::HomeDir->my_home;
$home_dir||=$ENV{'HOME'}||'';
$home_dir.='/';
my $username=getlogin || getpwuid($<);
my $do;my $ad;my $prompt;my $public_ip='';
my $builddir='';my @ls_tmp=();
# PHP Debugging
# error_log(__FILE__."\n".__LINE__." ". $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
# error_log(print_r($_REQUEST,TRUE)); For Sending Array to Log
# error_log(print_r(debug_backtrace(),TRUE));
# error_log(wp_debug_backtrace_summary());
# function cleanmsg($msg){
# return $msg;
# }
# function alert($msg,$timeout=1,$url='index.php'){
# $msg=cleanmsg($msg);
# echo "<script>(function(){alert('$msg');})();</script>";
# }
# MENU Log-In Log-Out
# https://premium.wpmudev.org/blog/
# how-to-add-a-loginlogout-link-to-your-emailserver-menu/
# http://vanweerd.com/enhancing-your-emailserver-3-menus/#add_login
# wp plugin list --path=/var/www/html/emailserver --status=active --allow-root
# https://www.digitalocean.com/community/tutorials/
# how-to-set-up-a-firewall-using-firewalld-on-centos-7
# sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
# sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
# sudo firewall-cmd --zone=public --permanent --list-ports
# https://chrisjean.com/change-timezone-in-centos/
# https://www.cartoonify.de/
# MAILWIZZ Delivery Server Settings
#
# Name: getwisdom_net Port*: 587
# From name: GetWisdom Monthly quota: 0
# Use for: All Reply-To email: contact@getwisdom.net
# Hostname*: mail.getwisdom.net Protocol: TLS
# Probablity: 100% Pause after send: 0
# Signing enabled: Yes Force Reply-To: Never
# Username: brian.kelly@getwisdom.net Timeout*: 30
# Hourly quota: 0 Bounce Server: choose
# Force FROM: Always Max. connection message: 1
# Password: ******** From email*: contact@getwisdom.net
# Daily quota: 0 Tracking domain: Choose
# Force Sender: No
# MAILWIZZ bounce server
#
# Hostname*: mail.getwisdom.net Service*: IMAP
# Search charset: UTF-8 Username*: brian.kelly@getwisdom.net
# Port*: 993 Disable authenticator:
# Password*: ******** Protocol: SSL
# Delete all messages: No Email: brian.kelly@getwisdom.net
# Validate ssl*: Yes
my $configure_emailserver=sub {
lib/Net/FullAuto/ISets/Local/EmailServer_is.pm view on Meta::CPAN
$ad='unix_listener /var/spool/postfix/private/auth';
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s*unix_listener auth-userdb*$ad*\" ".
"/usr/local/etc/dovecot/conf.d/10-master.conf");
$ad='unix_listener auth-userdb';
my $bd='#unix_listener /var/spool/postfix/private/auth';
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s*$bd*$ad*\" ".
"/usr/local/etc/dovecot/conf.d/10-master.conf");
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s/#user = root/user = vmail/\" ".
"/usr/local/etc/dovecot/conf.d/10-master.conf");
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s/#port = 587/port = 8587/\" ".
"/usr/local/etc/dovecot/conf.d/10-master.conf");
($stdout,$stderr)=$handle->cmd($sudo.
"cp -v conf.d/auth-system.conf.ext ".
"/usr/local/etc/dovecot/conf.d",
'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
"cp -v conf.d/10-ssl.conf ".
"/usr/local/etc/dovecot/conf.d",
'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s/#ssl = yes/ssl = required/\" ".
"/usr/local/etc/dovecot/conf.d/10-ssl.conf");
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s*ssl/certs/dovecot.pem*".
"letsencrypt/live/mail.$domain_url/fullchain.pem*\" ".
"/usr/local/etc/dovecot/conf.d/10-ssl.conf");
($stdout,$stderr)=$handle->cmd($sudo.
"sed -i \"s*ssl/private/dovecot.pem*".
"letsencrypt/live/mail.$domain_url/privkey.pem*\" ".
"/usr/local/etc/dovecot/conf.d/10-ssl.conf");
$ad=<<END;
service stats {
unix_listener stats-reader {
user = www-data
group = www-data
mode = 0660
}
unix_listener stats-writer {
user = www-data
group = www-data
mode = 0660
}
}
END
($stdout,$stderr)=$handle->cmd($sudo.
'cp -v /usr/local/etc/dovecot/conf.d/10-master.conf ~',
'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'chmod -v 777 ~/10-master.conf','__display__');
($stdout,$stderr)=$handle->cmd(
"echo -e \"$ad\" >> ~/10-master.conf");
($stdout,$stderr)=$handle->cmd($sudo.
'mv -v ~/10-master.conf /usr/local/etc/dovecot/conf.d/10-master.conf',
'__display__');
my $name=getpwuid($<);
($stdout,$stderr)=$handle->cmd($sudo.
"gpasswd -a $name dovecot",'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
"ls -1 /usr/local/etc/dovecot/conf.d");
foreach my $file (split /\n/, $stdout) {
next if $file=~/\.+$/;
($stdout,$stderr)=$handle->cmd($sudo.
"chmod -v 660 /usr/local/etc/dovecot/conf.d/$file",
'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
"chown -v vmail:dovecot /usr/local/etc/dovecot/conf.d/$file",
'__display__');
}
($stdout,$stderr)=$handle->cmd($sudo.
"gpasswd -d $name dovecot",'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'gpasswd -a www-data dovecot','__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'gpasswd -a www-data vmail','__display__');
($stdout,$stderr)=$handle->cwd("/opt/source/$gtarfile");
($stdout,$stderr)=$handle->cmd($sudo.
'mkdir -vp /var/run/dovecot','__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'cp -v dovecot.service.in /etc/systemd/system/dovecot.service',
'__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s#PIDFile=/usr/local#PIDFile=#" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s*.sbindir.*/usr/local/sbin*" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s/#ProtectSystem/ProtectSystem/" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s*.bindir.*/usr/local/bin*" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s*.rundir.*/var/run/dovecot*" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "s*@systemdservicetype@*simple*" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'sed -i "/ExecStop/iKillMode=none" '.
'/etc/systemd/system/dovecot.service');
($stdout,$stderr)=$handle->cmd($sudo.
'systemctl daemon-reload');
($stdout,$stderr)=$handle->cmd($sudo.
'systemctl enable saslauthd.service','__display__');
sleep 2;
($stdout,$stderr)=$handle->cmd($sudo.
'service saslauthd restart','__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'service saslauthd status -l','__display__');
($stdout,$stderr)=$handle->cmd($sudo.
'systemctl enable dovecot.service'.'__display__');
sleep 2;
($stdout,$stderr)=$handle->cmd($sudo.
'service dovecot restart','__display__');
( run in 1.648 second using v1.01-cache-2.11-cpan-39bf76dae61 )