This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.
Differences between revisions 19 and 20
Revision 19 as of 2004-05-28 12:59:48
Size: 3068
Editor: dsl-217-207-128-218
Comment: Added URL to Perdition site
Revision 20 as of 2004-07-19 20:41:27
Size: 4743
Editor: dsl-217-155-147-89
Comment: Transport comments were wrong. Have added exim4 config - exim3 is obsolete
Deletions are marked like this. Additions are marked like this.
Line 34: Line 34:
== Making exim deliver to those virtual users == == Making exim 3 deliver to those virtual users ==
Line 37: Line 37:
# Directors are evaluated in order of configuration, so if you place this
# above the local_delivery director this will play nice:
# If there is a virtual user in the dovecot dirs it will use that
# If not, it will try normal local delivery
# If you want to allow + addressing (ie having an address extension)
# then uncomment the suffix stanzas
Line 39: Line 45:
  #suffix = +*
  #suffix_optional
Line 44: Line 52:
# Transports are evaluated in order of configuration, so if you place this
# above the local_delivery director this will play nice:
# If there is a virtual user in the dovecot dirs it will use that
# If not, it will try normal local delivery
# Transports definitions are not order dependant - you just call a named transport
Line 61: Line 66:
== Making exim 4 deliver to those virtual users ==
If at all possible you should use exim 4 in place of the obsolete exim 3. Exim 4 has many more features to enable fine control of mail policy. Packages are available for all current linux distributions and other OS platforms.
{{{
# Router to send any mail for who a dovecot user exists to the appropriate maildir box
# Routers are evaluated in order of configuration.
# You will want to place this after the remote router and before the
# localuser router in the default configuration.
# If you want to allow + addressing (ie having an address extension)
# then uncomment the suffix stanzas
dovecot_router:
  driver = accept
  #local_part_suffix = +*
  #local_part_suffix_optional
  require_files = +/home/dovecot/users/${local_part}/
  transport = dovecot_transport
}}}
{{{
# Transport to send any mail for who a dovecot user exists to the appropriate maildir box
# Transports definitions are not order dependant - you just call a named transport
dovecot_transport:
  driver = appendfile
  user = dovecot
  group = dovecot
  mode = 0600
  directory=/home/dovecot/users/${lc:$local_part}/
  maildir_format = true
  mode_fail_narrower = false
  envelope_to_add = true
  return_path_add = true
}}}
In order to make this work, exim must be able to read the /home/dovecot/users/ directory, otherwise delivery will not work.

== Testing your exim configuration ==

Dovecot virtual users

An exercise in mailrouting by F. Overkamp <florian@obsimref.com>

Preamble

I wanted to use Dovecot to deal with mailboxes that may belong to accounts that may or may not exist as a unix user. I also required a large amount of flexibility in migration options - so mail-accounts may have any number of formats and daemons. I am doing distribution of these users by using [http://www.vergenet.net/linux/perdition/ Perdition], but thats just a preference.

A few assumptions were made in this setup:

  • All virtual users/mailboxes are in /home/dovecot/users
  • Password file for these users is /home/dovecot/passwd (looks just like a htpasswd file)

Desired results

The result I was looking for was this:

Mail for the domain comes in. If it has a dovecot mailbox, deliver it there. If not, continue with 'normal' local delivery.

  • So if frops@host is not a unix user and it does exist in dovecot, use that
  • So if florian@host is a unix user and it was not yet migrated to dovecot, use the old mailbox
  • So if dummy@host is a unix user and it was not yet migrated to dovecot, use the old mailbox
  • So if nonexistent@host exists nowhere, bounce :-)

Making dovecot use these mailboxes

auth = default
auth_userdb = static uid=500 gid=500 home=/home/dovecot/users/%u
auth_passdb = passwd-file /home/dovecot/passwd
auth_user = dovecot

By the way, I did not bother making another set of configs to deal with non-virtual users - I use perdition for that in my migration scenario.

Making exim 3 deliver to those virtual users

# Director to send any mail for who a dovecot user exists to the appropriate maildir box
# Directors are evaluated in order of configuration, so if you place this 
# above the local_delivery director this will play nice:
# If there is a virtual user in the dovecot dirs it will use that
# If not, it will try normal local delivery
# If you want to allow + addressing (ie having an address extension)
# then uncomment the suffix stanzas 
dovecot:
  driver = smartuser
  #suffix = +*
  #suffix_optional
  require_files = +/home/dovecot/users/${local_part}/
  transport = dovecot_transport

# Transport to send any mail for who a dovecot user exists to the appropriate maildir box
# Transports definitions are not order dependant - you just call a named transport
dovecot_transport:
  driver = appendfile
  user = dovecot
  group = dovecot
  mode = 0600
  directory=/home/dovecot/users/${lc:$local_part}/
  maildir_format = true
  mode_fail_narrower = false
  envelope_to_add = true
  return_path_add = true

In order to make this work, exim must be able to read the /home/dovecot/users/ directory, otherwise delivery will not work.

Making exim 4 deliver to those virtual users

If at all possible you should use exim 4 in place of the obsolete exim 3. Exim 4 has many more features to enable fine control of mail policy. Packages are available for all current linux distributions and other OS platforms.

# Router to send any mail for who a dovecot user exists to the appropriate maildir box
# Routers are evaluated in order of configuration.
# You will want to place this after the remote router and before the
# localuser router in the default configuration.
# If you want to allow + addressing (ie having an address extension)
# then uncomment the suffix stanzas 
dovecot_router:
  driver = accept
  #local_part_suffix = +*
  #local_part_suffix_optional
  require_files = +/home/dovecot/users/${local_part}/
  transport = dovecot_transport

# Transport to send any mail for who a dovecot user exists to the appropriate maildir box
# Transports definitions are not order dependant - you just call a named transport
dovecot_transport:
  driver = appendfile
  user = dovecot
  group = dovecot
  mode = 0600
  directory=/home/dovecot/users/${lc:$local_part}/
  maildir_format = true
  mode_fail_narrower = false
  envelope_to_add = true
  return_path_add = true

In order to make this work, exim must be able to read the /home/dovecot/users/ directory, otherwise delivery will not work.

Testing your exim configuration

Be carefull how you do this - test it with 'exim -bt <address>' for a few different options

  • So if frops@host is not a unix user and it does exist in dovecot, use that:

frops@host
  deliver to frops in domain host
  director = dovecot, transport = dovecot_transport
  • So if florian@host is a unix user and it was not yet migrated to dovecot, use the old mailbox:

florian@host
  deliver to florian in domain host
  director = procmail, transport = procmail_pipe


None: HowTo/VirtualhostingWithExim (last edited 2013-03-31 13:40:36 by cpc5-basf10-2-0-cust708)