Exim Configuration

Introduction

This document will cover using exim to handle incoming and outgoing mail for a Sakai installation.

Basic Configuration

First, you need to add the service name of your sakai installation to the list of domains the server accepts mail for:

domainlist local_domains = @:[your.sakai.domain]

If you wish to test mail delivery at this point, send a message to somename@your.sakai.domain, you should receive an error like "no such user". You should also see a record in the main exim log file (usually /var/log/exim/main.log).

Configuring Incoming Mail

The first thing that needs to be done is to set up a router that defines what mail gets sent to Sakai. The following code needs to be in the router section of your configuration file. As the routers are processed in order and the first one that matches is used, this code should be added near the top of the configuration.

# Router (in routers section)
sakai_local:
  driver = manualroute
  domains = [your.sakai.domain]
  transport = sakai_smtp
  route_list = "* localhost"
  local_parts = !webmaster:!feedback:!help:!bounces:!homepage:!postmaster:!bugs:!alerts
  self = send

Here's a line-by-line breakdown of the above configuration settings:

Setting

Description

domains = [your.sakai.domain]

The domain(s) for which the router will be used, in this case your Sakai domain name.

transport = sakai_smtp

The name of the transport that will handle the delivery (see bellow)

local_parts = !webmaster:!feedback:!help:!bounces:!homepage:!postmaster:!bugs:!alerts

A list of local parts (everything before the @) for which the router will or won't be used. In this case by prefixing the addresses with ! we are indicating these are addresses that we won't send to Sakai but will handle in some other way - for instance forwarding using system aliases.

Next in the Transport section of exim.conf:

# Transport (in transport section)
sakai_smtp:
  driver = smtp
  allow_localhost = true
  port = 8025

Quite simply, this is just a driver to forward mail via SMTP to port 8025 on the local machine.

Configuring a Fallback Host

If you are running Sakai in a cluster you may want to cater for the case that the machine receives the mail may have exim running but Sakai wont accept email - for instance because the application is not running on that node. Fortunately exim handles this quite easily using the fallback host.

First, make sure that exim is configured to accept mail for the machine's hostname as well as the Sakai mail domain:

domainlist local_domains = @:[your.sakai.domain]:[thisserver.host.name]

Now, all we need to do is add this to our router:

fallback_hosts = [another.node.address]

If exim receives an email for Sakai and Sakai is not running it will, on the next queue run, forward the mail to the server with the hostname defined in fallback_hosts. If there is more than one fallback host, they will be tried in the order listed.

Configuring exim for Outgoing Mail

You may wish to use exim to handle outgoing mail delivery. Having a local SMTP server gives you the ability to easily handle your mail in intelligent ways and control the way in which outgoing messages are spooled.

The first step in configuring outgoing Sakai mail to go through exim is to update your sakai.properties file:

# smtp server for outgoing emails
smtp@org.sakaiproject.email.api.EmailService=localhost

After clearing our your James install and restarting Sakai, you should be able to to send an email from your Sakai installation and see exim deliver it. If you get a "Relay not permitted error" check that your exim is configured to relay mail from the localhost.

Using A SmartHost

There are several reasons you may wish to use an upstream SMTP server to handle delivery of external emails including:

  • Institutional IT policy on outgoing emails
  • The desire to avoid build up of queues of mail for external addresses, which in turn delay delivery of mail for local users

In this example we will look at configuring a router that will forward all external email to a SMTP smarthost but will leave exim to handle mail for your institution. This router needs to go in your router section after the router settings mentioned above.

smarthost:
  driver = manualroute
  transport = remote_smtp
  domains = ! +local_domains : !*.[institution.domain] : ![institution.domain]
  route_list = "* [smtp.server.name]"

Here's a line-by-line breakdown of the above configuration settings:

Setting

Description

transport = remote_smtp

The pre-defined exim transport to use.

domains = ! +local_domains : !*.[institution.domain] : ![institution.domain]

Domains to exclude from routing. In this case, this list includes anything on the local domain list as well as anything that matches your local institution domain.

route_list = "* [smtp.server.name]"

Simply the host name of your institutional SMTP server that will continue the process of delivering outgoing messages after they leave exim.