TABLE_POSTGRESQL(5) File Formats Manual TABLE_POSTGRESQL(5) table-postgres - PostgreSQL smtpd (DESCRIPTION) PostgreSQL smtpd(8) . smtpd.conf(5) . POSTGRESQL (POSTGRESQL TABLE) postgresql postgres(1) . smtpd(8) user-id / / . PostgreSQL postgresql(1) . crypt(3) . encrypt(1) encrypt smtpctl(8) . POSTGRESQL (POSTGRESQL TABLE CONFIG FILE) : conninfo host='host' user='user' password='password' dbname='dbname' PostgreSQL. : conninfo host='db.example.com' user='maildba' password='...' dbname='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=$1; (FILES) /etc/mail/postgres.conf table-postgresql(5). (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 PostgreSQL: CREATE TABLE domains ( id SERIAL, domain VARCHAR(255) NOT NULL DEFAULT '' ); CREATE TABLE virtuals ( id SERIAL, email VARCHAR(255) NOT NULL DEFAULT '', destination VARCHAR(255) NOT NULL DEFAULT '' ); CREATE TABLE credentials ( id SERIAL, 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/postgresql.conf conninfo host='db.example.com' user='maildba' password='OpenSMTPDRules!' dbname='opensmtpdb' query_alias SELECT destination FROM virtuals WHERE email=$1; query_credentials SELECT email, password FROM credentials WHERE email=$1; query_domain SELECT domain FROM domains WHERE domain=$1; /etc/mail/smtpd.conf table domains postgres:/etc/mail/postgres.conf table virtuals postgres:/etc/mail/postgres.conf table credentials postgres:/etc/mail/postgres.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) /etc/mail/postgres.conf conninfo host='db.example.com' user='postfix' password='...' dbname='postfix' query_alias SELECT destination FROM alias WHERE email=$1; query_credentials SELECT username, password FROM mailbox WHERE username=$1; query_domain SELECT domain FROM domain WHERE domain=$1; . (TODO) : query_netaddr query_userinfo query_source query_mailaddr query_addrname (SEE ALSO) encrypt(1), crypt(3), smtpd.conf(5), smtpctl(8), smtpd(8) (HISTORY) table_postgresql . stdio . (AUTHORS) table_postgresql Gilles Chehade . stdio Omar Polo . Linux 6.12.107+deb13-amd64 April 21 2024 Linux 6.12.107+deb13-amd64