This `HowTo`_ is from adapted from an e-mail exchange on the Sork mailing list. It is a discussion of setting up Sork's vacation module
for use with an ldap based system, using gnarwl as the server-side vacation program. The software used is:
.. _`HowTo`: https://wiki.horde.org/HowTo?referrer=SorkVacationWithGnarwl
MTA: postfix
vacation program: gnarwl
LDAP: openldap 2.2.13-4
Horde version: 3.1.3
vacation version: 3.0
(For those who don't want to use gnarwl, a "traditional" vacation program for ldap is available at http://www.etc.msys.ch/sources/ldapvacation/).
Note
- sork's vacation may be replaced by Ingo in the future.
- freebsd user. Downloaded gnarwl package does not support openldap, build from port instead.
First, define a postfix transport map for your specific internal autoreply domain.
If your domain is "example.com" and your autoreply domain is to be "autoreply.example.com", then you would add the following to
/etc/postfix/transport:
::
autoreply.example.com gnarwl:example.com
Next, create the database files from the above file. The following command should create the appropriate transport.db file:
::
postmap hash:transport
Next add the transport to the postfix main.cf file in the "TRANSPORT MAPS" section:
::
# TRANSPORT MAPS
#
transport_maps = hash:/etc/postfix/transport
Now add a new service to the /etc/postfix/master.cf file:
::
# gnarwl autoresponder
gnarwl unix - n n - - pipe
flags=F user=gnarwl argv=/usr/bin/gnarwl -a ${user}@${nexthop} -s ${sender}
Create an LDAP vacation alias map called ldap-virtual_alias_maps-vacation.cf:
::
server_host = ldap://ldap.example.com
version = 3
server_port = 389
search_base = ou=mail,...
query_filter = (&(objectClass=MailAccount)(objectClass=Vacation)(mail=%s)(accountActive=TRUE)(vacationActive=TRUE))
result_attribute = mail
result_filter = %s,%u@autoreply.example.com
bind = no
Of course, the above needs to reflect your ldap environment...
Append the alias map to LDAP's main.cf file (make sure it's the first map listed):
::
virtual_alias_maps =
ldap:/etc/postfix/ldap-virtual_alias_maps-vacation.cf,
ldap:/etc/postfix/ldap-virtual_alias_maps.cf
after those changes, reload postfix:
::
postfix reload
Extend your LDAP with the vacation schema and setup a test account. An example ldif follows:
::
dn:mail=vacationtest@example.com,...
objectClass: top
objectClass: Vacation
mail: vacationtest@example.com
accountActive: TRUE
[... other mail specific attributes ...]
vacationActive: TRUE
vacationInfo:: [vacation message has to be utf-8 encoded and also base64 if necessary]
After loading the above ldif, test your postfix alias vacation lookup map:
::
postmap -v -q vacationtest@example.com
ldap:/etc/postfix/ldap-virtual_alias_maps-vacation.cf
This should return the following if the vacation has been enabled, otherwise nothing.
::
vacationtest@example.com,vacationtest@autoreply.example.com
If this works so far, configure gnawrl to suit your needs (only the ldap part and the header config is included):
Edit gnarwl.cfg and change the following lines:
::
server ldap.example.com
protocol 3
base ou=mail...
queryfilter
(&(objectClass=MailAccount)(objectClass=Vacation)(mail=$recepient)(accountActive=TRUE)(vacationActive=TRUE))
mta /usr/sbin/sendmail $sender
charset
forceheader /var/lib/gnarwl/header-utf8.txt
loglevel 3
Create the file /var/lib/gnarwl/header-utf8.txt and add the content shown below:
::
From: $fullname <$recepient>
To: $sender
X-mailer: GNARWL
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Subject: Re: $subject
Finally you will have to configure the sork vacation app with the ldap driver. This should be an easy task now ;)
Remember, that you have to configure/specify the vacation related attributes.