TABLE_MYSQL(5) File Formats Manual TABLE_MYSQL(5) table-mysql - MySQL MariaDB smtpd (DESCRIPTION) MySQL MariaDB smtpd(8) . smtpd.conf(5) . MYSQL (MYSQL TABLE) mysql mysql(1) . smtpd(8) (user-id) / / . MySQL mysql(1) . crypt(3) . encrypt(1) encrypt smtpctl(8) . MYSQL (MYSQL TABLE CONFIG FILE) : host hostname MySQL MariaDB . : host db.example.com username username MySQL MariaDB. : username maildba password password MySQL MariaDB. : password OpenSMTPDRules! database databse MySQL MariaDB. : databse opensmtpdb query_alias SQL statement . . SMTP . VARCHAR . query_credentials SQL statement . . SMTP . VARCHAR crypt(3). query_domain SQL statement . . SMTP . VARCHAR . query_mailaddrmap SQL statement . . VARCHAR . SQL : query_ SELECT value FROM table WHERE key=?; (EXAMPLES) (GENERIC EXAMPLE) OpenSMTPD: (Building a Mail Server) . . vmail . : # useradd -g =uid -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail # mkdir /var/vmail # chown vmail:vmail /var/vmail MySQL schema CREATE TABLE domains ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, domain VARCHAR(255) NOT NULL DEFAULT '' ); CREATE TABLE virtuals ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL DEFAULT '', destination VARCHAR(255) NOT NULL DEFAULT '' ); CREATE TABLE credentials ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL DEFAULT '', password VARCHAR(255) NOT NULL DEFAULT '' ); INSERT INTO domains VALUES (1, "example.com"); INSERT INTO domains VALUES (2, "example.net"); INSERT INTO domains VALUES (3, "example.org"); INSERT INTO virtuals VALUES (1, "abuse@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (2, "postmaster@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (3, "webmaster@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (4, "bob@example.com", "vmail"); INSERT INTO virtuals VALUES (5, "abuse@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (6, "postmaster@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (7, "webmaster@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (8, "alice@example.net", "vmail"); INSERT INTO credentials VALUES (1, "bob@example.com", "$2b$08$ANGFKBL.BnDLL0bUl7I6aumTCLRJSQluSQLuueWRG.xceworWrUIu"); INSERT INTO credentials VALUES (2, "alice@example.net", "$2b$08$AkHdB37kaj2NEoTcISHSYOCEBA5vyW1RcD8H1HG.XX0P/G1KIYwii"); /etc/mail/mysql.conf host db.example.com username maildba password OpenSMTPDRules! database opensmtpdb query_alias SELECT destination FROM virtuals WHERE email=?; query_credentials SELECT email, password FROM credentials WHERE email=?; query_domain SELECT domain FROM domains WHERE domain=?; /etc/mail/smtpd.conf table domains mysql:/etc/mail/mysql.conf table virtuals mysql:/etc/mail/mysql.conf table credentials mysql:/etc/mail/mysql.conf listen on egress port 25 tls pki mail.example.com listen on egress port 587 tls-require pki mail.example.com auth accept from any for domain virtual deliver to mbox POSTFIX ( POSTFIXADMIN) (MOVING FROM POSTFIX & POSTFIXADMIN) /etc/mail/mysql.conf host db.example.com username postfix password PostfixOutOpenSMTPDin database postfix query_alias SELECT destination FROM alias WHERE email=?; query_credentials SELECT username, password FROM mailbox WHERE username=?; query_domain SELECT domain FROM domain WHERE domain=?; . (FILES) /etc/mail/mysql.conf table-mysql(8). (TODO) : query_netaddr query_userinfo query_source query_mailaddr query_addrname (SEE ALSO) smtpd.conf(5), smtpctl(8), smtpd(8), encrypt(1), crypt(3) Linux 6.12.107+deb13-amd64 July 4, 2016 Linux 6.12.107+deb13-amd64