## OpenSMTPD Admin Fork of Postfix Admin 2.1.0 (released in 2007) Database needed to use SQL with OpenSMTPD CREATE DATABASE IF NOT EXISTS `opensmtpd` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `opensmtpd`; CREATE TABLE `admin` ( `username` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '', `role` varchar(32) DEFAULT NULL, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`username`), KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Virtual Admins' CREATE TABLE `alias` ( `address` varchar(255) NOT NULL DEFAULT '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`address`), KEY `address` (`address`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Virtual Aliases' CREATE TABLE `domain` ( `domain` varchar(255) NOT NULL DEFAULT '', `description` varchar(255) NOT NULL DEFAULT '', `aliases` int(10) NOT NULL DEFAULT 0, `mailboxes` int(10) NOT NULL DEFAULT 0, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`domain`), KEY `domain` (`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Virtual Domains' CREATE TABLE `domain_admins` ( `username` varchar(255) NOT NULL DEFAULT '', `domain` varchar(255) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Domain Admins' CREATE TABLE `log` ( `timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `username` varchar(255) NOT NULL DEFAULT '', `domain` varchar(255) NOT NULL DEFAULT '', `action` varchar(255) NOT NULL DEFAULT '', `data` varchar(255) NOT NULL DEFAULT '', KEY `timestamp` (`timestamp`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Log' CREATE TABLE `mailbox` ( `username` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) NOT NULL DEFAULT '', `maildir` varchar(255) NOT NULL DEFAULT '', `domain` varchar(255) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`username`), KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Virtual Mailboxes' CREATE TABLE `vacation` ( `email` varchar(255) NOT NULL DEFAULT '', `subject` varchar(255) NOT NULL DEFAULT '', `body` text NOT NULL, `cache` text NOT NULL, `domain` varchar(255) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`email`), KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='as60131 Admin - Virtual Vacation' Config for OpenSMTPTD, MySQL/MariaDB example: # /etc/mail/smtpd.conf table credentials mysql:/etc/mail/sql.conf table domains mysql:/etc/mail/sql.conf table userinfo mysql:/etc/mail/sql.conf table virtuals mysql:/etc/mail/sql.conf Connecting the database to smtpd: # /etc/mail/sql.conf host localhost username opensmtpd password RandomString database opensmtpd query_alias SELECT goto FROM alias WHERE address=?; query_credentials SELECT username, password FROM mailbox WHERE username=?; query_domain SELECT domain FROM domain WHERE domain=?; query_userinfo SELECT 501, 501, maildir FROM mailbox WHERE username=?;