Exim autoreply LDAP csoport alapján

Mivel ezt amúgy is le kellene írnom a belső dokumentációba, egyszerűbb, ha már eleve ide (is) elkészítem, akár még másnak is hasznos lehet.

A dolog lényege az, hogy tőlünk is távoznak munkatársak néha. Szerencsére elég ritkán ahhoz, hogy eddig ingerküszöb alatt maradjon a globális megoldás kitalálása (ez volt a hosszasabb) és megvalósítása is.

Az egyik fontos lépés az az volt, hogy ha olyan kolléga kap levelet, aki már távozott a cégtől, akkor a feladó kapjon tájékoztatást, hogy a levele bizony nem ért célba, és a jövőben már más címen tud elérni minket. Ehhez talán a legjobb megoldás az exim autoreply használata.

Az dolog lényege a következő: érkezik egy levél, ami végigfut az exim routereken, egészen addig, amíg nem talál olyat, amire illeszkedik. Ha talál, akkor egyrészt nem folytatja a következő routerre, másrészt átadja a levelet a routerben meghatározott transport-nak. Persze a dolog nem volt ennyire egyszerű, bár tény, hogy annyira rettenetesen bonyolult sem. Lássuk az első lépést, magát a router-t:

usergone:
  driver = redirect
  allow_filter
  allow_fail
  domains = +YOURDOMAINS
  hide_child_in_errmsg
  debug_print = "R: autoreply for $local_part"
  reply_transport = olduser_reply
  file = /etc/exim4/autoreply.txt
  require_files = /etc/exim4/autoreply.txt
  condition = ${lookup ldapm {user=userid=userdn PASS=userpass \
  ldap:///cn=nothere,ou=Groups,dc=YOURDC?memberUid?sub?(memberUid=$local_part)}{true}{false}}
  user = Debian-exim
  group = Debian-exim
  no_expn

Eléggé szokványos dolog, egy ügyesség van benne, mégpedig a condition sor. Az ott szereplő LDAP lookup igazzal tér vissza, ha a „nothere” csoportban szerepel a címzett, azaz oda kell felvenni azokat a felhasználókat, akik már nincsenek a cégnél. A router az olduser_reply transportra dobja a leveleket:

olduser_reply:
  debug_print = "T: olduser reply for $local_part@domain"
  driver = autoreply
  file = /etc/exim4/autoreply.txt
  file_expand
  from = $local_part@c3d.hu
  to = $sender_address
  subject = "Re: $h_subject"
  text = "Automatic reply"

Ez is egy tök egyszerű dolog, egyetlen trükk van benne, hogy az autoreply.txt az egy filter (lásd az allow_filter sort feljebb), ami így néz ki:

# Exim filter
if ($h_subject: does not contain "SPAM?" and personal) then
 seen mail
 expand file /etc/exim4/autoreply.txt.data
 once /var/spool/exim4/$local_part.$domain-vacation.db
 log  /var/spool/exim4/$local_part.$domain-vacation.log
 once_repeat 7d
 to $reply_address
 from $local_part\@$domain
 subject "Autoreply...[Re: $h_subject:]"
endif

Ami fél napot elvett az életemből az a „seen” szócska. Ugyanis két fajta kézbesítés létezik, a significant és ami nem. Nekünk arra van szükségünk hogy a már nem itt dolgozók ne kapják a leveleket, ezért a mail elé, ami alapból nem significant be kell tenni a „seen” szócskát, hogy az exim tényleg ne foglalkozzon tovább a levél továbbításával. Hurrá.


[zotpress collection=”7D3RRNDM”]