Setting up the mailbot

Email Address Settings

The first step is to configure the project to use email addresses of your choosing. You should modify the following values in distro_tracker/project/settings/local.py:

  • DISTRO_TRACKER_CONTROL_EMAIL

    This is the email address which is to be used for receiving control messages.

  • DISTRO_TRACKER_CONTACT_EMAIL

    This is the email address from which the mailbot responds.

  • DISTRO_TRACKER_FQDN

    The fully qualified domain name which will receive package related messages. Package messages will be sent to <package_name>@<DISTRO_TRACKER_FQDN>.

Note

These emails are allowed to be on different domains.

Management commands

In order to have the received email messages properly processed they need to be passed to the following management commands:

  • distro_tracker_control - handles control messages

  • distro_tracker_dispatch - handles package messages

  • distro_tracker_receive_news - handles messages which should be turned into news items

These commands expect the received email message on standard input, which means that the system’s MTA needs to be setup to forward appropriate mails to the appropriate command.

Exim4

Mails received to DISTRO_TRACKER_CONTROL_EMAIL address should be piped to the control_process command. A way to set this up in Exim would be to create a new alias for the local part of the control email address and set it to point to the user who owns the Distro Tracker application. That user should have a .forward file in their home directory which includes the directive to pipe incoming email to the command.

For example, if the DISTRO_TRACKER_CONTROL_EMAIL is set to control@distro_tracker.debian.net and the system user which owns the application is called dtracker the contents of /etc/aliases should include the following line:

control: dtracker

And the .forward file should be:

| python3 path/to/manage.py distro_tracker_control

Mails received at DISTRO_TRACKER_CONTACT_EMAIL should be saved or forwarded to the Distro Tracker administrators. This can be done by adding an additional alias to /etc/aliases/. For example, if DISTRO_TRACKER_CONTACT_EMAIL is set to owner@distro_tracker.debian.net, the line in the aliases file would be:

owner: some-admin-user

All mail addresses at the DISTRO_TRACKER_FQDN domain (apart from DISTRO_TRACKER_CONTROL_EMAIL and DISTRO_TRACKER_CONTACT_EMAIL addresses if they are on that domain), are considered package names. As such, all of them should be piped to the dispatch management command so that they can be processed by Distro Tracker.

To set this up, a custom router and transport can be added to exim configuration which acts as a catchall mechanism for any email addresses which are not recognized. Such router and transport could be:

distro_tracker_package_router:
  debug_print = "R: Distro Tracker catchall package router for $local_part@$domain"
  driver = accept
  transport = distro_tracker_dispatch_pipe

distro_tracker_dispatch_pipe:
  driver = pipe
  command = python3 /path/to/manage.py distro_tracker_dispatch
  user = dtracker
  group = mail
  log_output

Note

This router should be placed last in the exim configuration file.

Postfix

To configure Postfix to forward email messages to appropriate commands you need to first create a file with virtual aliases for the relevant email addresses.

Assuming the following configuration:

DISTRO_TRACKER_CONTACT_EMAIL = owner@distro_tracker.debian.net
DISTRO_TRACKER_CONTROL_EMAIL = control@distro_tracker.debian.net
DISTRO_TRACKER_FQDN = distro_tracker.debian.net

The file /etc/postfix/virtual would be:

distro_tracker.debian.net not-important-ignored
postmaster@distro_tracker.debian.net postmaster@localhost
owner@distro_tracker.debian.net dtracker-owner@localhost
control@distro_tracker.debian.net dtracker-control@localhost
_news@distro_tracker.debian.net dtracker-news@localhost
# Catchall for package emails
@distro_tracker.debian.net dtracker-dispatch@localhost

The /etc/aliases file should then include the following lines:

dtracker-owner: some-admin-user
dtracker-control: "| python3 /path/to/manage.py distro_tracker_control"
dtracker-dispatch: "| python3 /path/to/manage.py distro_tracker_dispatch"
dtracker-news: "| python3 /path/to/manage.py distro_tracker_receive_news"

Then, the main.cf file should be edited to include:

virtual_alias_maps = hash:/etc/postfix/virtual

Note

Be sure to run newaliases and postmap after editing /etc/aliases and /etc/postfix/virtual.

This way, all messages which are sent to the owner are delivered to the local user some-admin-user, messages sent to the control address are piped to the distro_tracker_control management command, mesages which should be turned into news items to the distro_tracker_receive_news command and messages sent to any other address on the given domain are passed to the distro_tracker_dispatch management command.