postfixAdmin

part-1:   https://www.youtube.com/watch?v=fh6NbhUtBfw


########Note, Replace :

#

Domain name = hvthang.xyz = Your-Domain

Hostname = mail = Your-Hostname

Group name = happyghost = Your-Group

User name = happyghost = Your-User

Database name = postfixadmindb = Your-Database-Name

Database user = postfixuser = Your-Database-User

Database password = PostfixAdminPWD = Your-Database-Password

Mail Local = virtualmailbox = Your-Local

########Important 

## If you change something, be careful to change this in any configuration in the next steps.#

apt install apache2 libapache2-mod-php mariadb-server php-fpm php-imap php-mbstring php-mysql php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp -y
apt install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-lmtpd dovecot-imapd dovecot-pop3d -y
groupadd -g 5000 happyghost
useradd -g happyghost -u 5000 happyghost -s /sbin/nologin create database postfixadmindb;
create user postfixuser@localhost identified by 'PostfixAdminPWD';
grant all on postfixadmindb.* to postfixuser@localhost;



Part-2:  https://www.youtube.com/watch?v=JBiy1mRZSWo




########Note, Replace :

#

Domain name = hvthang.xyz = Your-Domain

Hostname = mail = Your-Hostname

Group name = happyghost = Your-Group

User name = happyghost = Your-User

Database name = postfixadmindb = Your-Database-Name

Database user = postfixuser = Your-Database-User

Database password = PostfixAdminPWD = Your-Database-Password

Mail Local = virtualmailbox = Your-Local

########Important 

#

# If you change something, be careful to change this in any configuration in the next steps.

#


####[7.2]

vim mysql_virtual_alias_domain_catchall_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'


####[7.3]

vim mysql_virtual_alias_domain_mailbox_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'


####[7.4]

vim mysql_virtual_alias_domain_maps.cf

user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'


####[7.5]

vim mysql_virtual_alias_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT goto FROM alias WHERE address='%s' AND active = '1'


####[7.6]

vim mysql_virtual_domains_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'


####[7.7]

vim mysql_virtual_mailbox_limit_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'


####[7.8]

vim mysql_virtual_mailbox_maps.cf


user = postfixuser

password = PostfixAdminPWD

hosts = localhost

dbname = postfixadmindb

query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'



#####[ 8.1.5 ]

### Configure Postfix to use MariaDB/MySQL Database ( step 7.2 to step 7.8 )


virtual_mailbox_domains = proxy:mysql:/etc/postfix/query/mysql_virtual_domains_maps.cf

virtual_alias_maps = 

proxy:mysql:/etc/postfix/query/mysql_virtual_alias_maps.cf, 

proxy:mysql:/etc/postfix/query/mysql_virtual_alias_domain_maps.cf, 

proxy:mysql:/etc/postfix/query/mysql_virtual_alias_domain_catchall_maps.cf

virtual_mailbox_maps = 

proxy:mysql:/etc/postfix/query/mysql_virtual_mailbox_maps.cf, 

proxy:mysql:/etc/postfix/query/mysql_virtual_alias_domain_mailbox_maps.cf


### Enable auth


smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth

smtpd_sasl_auth_enable = yes


smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination


virtual_transport = lmtp:unix:private/dovecot-lmtp


virtual_mailbox_base = /var/virtualmailbox

virtual_minimum_uid = 5000

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

##### [ End 8.1.5 ]

#####

##### [9.1.5]

mail_location = maildir:/var/virtualmailbox/%d/%n

mail_privileged_group = happyghost

mail_uid = happyghost

mail_gid = happyghost

first_valid_uid = 5000

last_valid_uid = 5000


###

##### [ 9.3.1 ]

driver = mysql


connect = host=localhost dbname=postfixadmindb user=postfixuser password=PostfixAdminPWD


default_pass_scheme = MD5-CRYPT


password_query = SELECT username as user, password, '/var/virtualmailbox/%d/%n' as userdb_home, 'maildir:/var/virtualmailbox/%d/%n' as userdb_mail, 5000 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'


user_query = SELECT '/var/virtualmailbox/%d/%u' as home, 'maildir:/var/virtualmailbox/%d/%u' as mail, 5000 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'



###LMTP service [ 9.6.3 ]


unix_listener /var/spool/postfix/private/dovecot-lmtp {

mode = 0600

user = postfix

group = postfix

}


###AUTH service [ 9.6.4 ]


unix_listener /var/spool/postfix/private/auth {

mode = 0666

user = postfix

group = postfix

}


unix_listener auth-userdb {

mode = 0600

user = happyghost

}

user = dovecot


###AUTH-WORKER service [ 9.6.5 ]


user = happyghost




part-3:  https://www.youtube.com/watch?v=fLwnaQUfw24







wget https://udomain.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz


<?php

$CONF['database_type'] = 'mysqli';

$CONF['database_host'] = 'localhost';

$CONF['database_user'] = 'postfixuser';

$CONF['database_password'] = 'PostfixAdminPWD';

$CONF['database_name'] = 'postfixadmindb';

$CONF['configured'] = true;

$CONF['encrypt'] = 'md5crypt';

?>



<VirtualHost *:80>


DocumentRoot /var/www/postfixadmin/public

ServerName hvthang.xyz

ServerAlias postfixadmin.hvthang.xyz


<Directory /var/www/postfixadmin/>

Options FollowSymlinks

AllowOverride All

Require all granted

</Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>