commit d7a80ddfd355802f3d646c36e8a99f5509460eee
parent 84a7feeddec6e465170d7b70691e3a8676eaca8b
Author: Pablo Murad <pablo@pablomurad.com>
Date: Tue, 19 May 2026 20:58:49 -0300
better mail
Diffstat:
3 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/email/config/runv-member-mail.example.json b/email/config/runv-member-mail.example.json
@@ -1,13 +1,13 @@
{
- "enabled": false,
+ "enabled": true,
"backend": "postfix-mysql",
"mysql_map_file": "/etc/postfix/mysql-virtual-alias-maps.cf",
"mysql": {
- "table": "",
- "address_column": "",
- "goto_column": "",
- "managed_column": "comment",
- "managed_value": "runv-email-alias"
+ "table": "virtual_aliases",
+ "address_column": "source",
+ "goto_column": "destination",
+ "active_column": "active",
+ "active_value": "1"
},
"reload_postfix": true,
"reload_command": ["systemctl", "reload", "postfix"],
diff --git a/scripts/admin/inspect_postfix_mysql_aliases.py b/scripts/admin/inspect_postfix_mysql_aliases.py
@@ -93,8 +93,8 @@ def main() -> int:
f' "table": "{table}",\n'
f' "address_column": "{addr_col or "address"}",\n'
f' "goto_column": "{dest_col or "goto"}",\n'
- ' "managed_column": "comment",\n'
- ' "managed_value": "runv-email-alias"\n'
+ ' "active_column": "active",\n'
+ ' "active_value": "1"\n'
" },\n"
' "reload_postfix": true,\n'
' "auto_sync_on_approve": true\n'
diff --git a/tools/lib/runv_mail_sync.py b/tools/lib/runv_mail_sync.py
@@ -148,6 +148,8 @@ def mysql_sync_options(cfg: dict[str, Any]) -> dict[str, str]:
goto_col = goto_col or inferred_goto
managed_col = str(block.get("managed_column", "")).strip()
managed_val = str(block.get("managed_value", "runv-email-alias")).strip()
+ active_col = str(block.get("active_column", "")).strip()
+ active_val = str(block.get("active_value", "1")).strip()
return {
"map_file": map_file,
"parsed": parsed, # type: ignore[dict-item]
@@ -156,6 +158,8 @@ def mysql_sync_options(cfg: dict[str, Any]) -> dict[str, str]:
"goto_column": goto_col,
"managed_column": managed_col,
"managed_value": managed_val,
+ "active_column": active_col,
+ "active_value": active_val,
}
@@ -269,6 +273,8 @@ def sync_postfix_mysql(*, dry_run: bool = False, cfg: dict[str, Any] | None = No
goto_col = opts["goto_column"]
managed_col = opts["managed_column"]
managed_val = opts["managed_value"]
+ active_col = opts["active_column"]
+ active_val = opts["active_value"]
rows = active_forwarding_rows()
active_addresses = {alias for alias, _ in rows}
@@ -289,6 +295,10 @@ def sync_postfix_mysql(*, dry_run: bool = False, cfg: dict[str, Any] | None = No
cols.append(f"`{managed_col}`")
vals.append(sql_literal(managed_val))
updates.append(f"`{managed_col}` = {sql_literal(managed_val)}")
+ if active_col:
+ cols.append(f"`{active_col}`")
+ vals.append(active_val)
+ updates.append(f"`{active_col}` = {active_val}")
upsert = (
f"INSERT INTO `{table}` ({', '.join(cols)}) VALUES ({', '.join(vals)}) "
f"ON DUPLICATE KEY UPDATE {', '.join(updates)};"