Skip to content

Server configuration: MLMMJ (Mailing Lists)

runout-at edited this page Aug 29, 2024 · 5 revisions

Config

  • /etc/exim4/conf.d/main/00_mlmmj
MLMMJ_ENABLED = yes
MLMMJ_HOME = /var/spool/mlmmj
domainlist mlmmj_domains = lists.example.com : lists.example.net : lists.example.org
delay_warning_condition = ${if match_domain{$domain_data}{+mlmmj_domains}{no}{yes}}

Router

  • /etc/exim4/conf.d/router/050_mlmmj
.ifdef MLMMJ_ENABLED
mlmmj_router:
  debug_print = "R: mlmmj_router for ${lc:$local_part}@$domain_data"
  driver = accept
  local_parts = ${lookup {${lc:$local_part}}dsearch{MLMMJ_HOME/$domain_data}}
  domains = +mlmmj_domains
  #require_files = MLMMJ_HOME/$domain_data/${lc:$local_part_data}
  # Use this instead, if you don't want to give Exim rx rights to mlmmj spool.
  # Exim will then spawn a new process running under the UID of "mlmmj".
  require_files = mlmmj:MLMMJ_HOME/$domain_data/$local_part_data
  local_part_suffix = +*
  local_part_suffix_optional
  headers_remove = Delivered-To
  headers_add = Delivered-To: ${lc:$local_part_data}$local_part_suffix@$domain_data
  headers_remove = Precedence
  headers_add = Precedence: list
  transport = mlmmj_transport
.endif

Transport

  • /etc/exim4/conf.d/transport/30_mlmmj
mlmmj_transport:
  debug_print = "R: mlmmj_transport for ${lc:$local_part_data}@$domain_data"
  driver = pipe
  return_path_add
  user = mlmmj
  group = mlmmj
  home_directory = MLMMJ_HOME/$domain_data
  current_directory = MLMMJ_HOME/$domain_data
  command = /usr/bin/mlmmj-amime-receive -F -L MLMMJ_HOME/$domain_data/${lc:$local_part_data}

This transport uses the amime extension from https://codeberg.org/mlmmj/mlmmj/src/branch/master/contrib/amime-receive

Cron

On a system without systemd:

  • /etc/cron.d/mlmmj
0 */2 * * * root /usr/bin/test -x /usr/bin/mlmmj-maintd && find /var/spool/mlmmj -mindepth 1 -maxdepth 1 -type d -exec /usr/bin/mlmmj-maintd -F -d {} \;