.. _integration: =============== MTA Integration =============== Baruwa can be integrated with the MTA to enable configuring of some MTA features from with in Baruwa. Postfix and Exim are the only MTA's supported at the moment as Sendmail lacks native SQL support. Postfix ======= At the moment the following features can be integrated + Relay domains + Transports + Relay recipient maps + Global whitelists Relay domains ------------- In your postfix main.cf file set:: relay_domains = mysql:/etc/postfix/mysql-relay_domains.cf Then create the /etc/postfix/mysql-relay_domains.cf file with the following content:: user = baruwa password = password dbname = baruwa query = SELECT address FROM user_addresses WHERE \ address='%s' AND enabled=1 AND address_type=1; hosts = 127.0.0.1 Transports ---------- In your postfix main.cf file set:: transport_maps = mysql:/etc/postfix/mysql-transports.cf Then create the /etc/postfix/mysql-transports.cf file with the following content:: user = baruwa password = password dbname = baruwa query = SELECT CONCAT('smtp:[', mail_hosts.address, ']:', port) \ FROM mail_hosts, user_addresses WHERE user_addresses.address = '%s' AND \ user_addresses.id = mail_hosts.useraddress_id; hosts = 127.0.0.1 Relay recipient maps -------------------- In your postfix main.cf file set:: relay_recipient_maps = mysql:/etc/postfix/mysql-relay_recipients.cf Then create the /etc/postfix/mysql-relay_recipients.cf file with the following content:: user = baruwa password = password dbname = baruwa query = SELECT 1 FROM user_addresses WHERE address='%s' AND address_type=2 \ UNION SELECT 1 FROM auth_user WHERE username = '%s' OR email = '%s' \ hosts = 127.0.0.1 Global Whitelist ---------------- In your postfix main.cf file set:: whitelist_policy = check_client_access mysql:/etc/postfix/mysql-global_lists.cf smtpd_recipient_restrictions = whitelist_policy Then create the /etc/postfix/mysql-global_lists.cf with the following content:: user = baruwa password = password dbname = baruwa query = SELECT CONCAT('PERMIT') FROM lists WHERE from_address='%s' AND list_type=1 \ UNION SELECT CONCAT('REJECT') FROM lists WHERE from_address='%s' AND list_type=2; hosts = 127.0.0.1 Exim ==== At the moment the following features can be integrated. + Route Data + Relay domains Route Data ---------- You can use the following route_data option in your routers used to deliver the cleaned mail:: route_data = ${lookup mysql {SELECT GROUP_CONCAT(CONCAT(mail_hosts.address,\ '::',mail_hosts.port) SEPARATOR ':') a FROM mail_hosts, \ user_addresses WHERE useraddress_id=user_addresses.id AND \ user_addresses.address = '${quote_mysql:$domain}' AND \ mail_hosts.enabled = 1 AND user_addresses.enabled = 1}} Relay domains ------------- Use the following domain list in your acl's:: domainlist relay_sql_domains = mysql;SELECT address FROM user_addresses WHERE \ address_type=1 AND enabled=1 AND address='${quote_mysql:$domain}';