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 )