Share |
 
 

Virtual VACATION mit Postfix und mySQL


cplinux // 19.01.2008 15:42

Kategorie: E-Mail-Server

Bewertung:
Insgesamt 0 Bewertung(en)



Im Netz gibt es verschiedene Anleitungen für Auto-Responder.
Einige basieren z.B. auf vacation-Messages, die sich im home-Verzeichnis des jeweiligen Benutzers befinden.
Hier möchte ich eine Konfiguration aufzeigen, die komplett mit mySQL funktioniert.
 
Ich verwende in meinem Beispiel als Basis diese Konfiguration: www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html
 
Dafür wird das Paket vacation und einige Perl-Pakete benötigt.
 
apt-get install libemail-mime-encodings-perl libmime-perl libemail-mime-contenttype-perl libmime-types-perl libperl5.8 libdbd-mysql-perl libclass-dbi-mysql-perl libemail-valid-perl libmail-sendmail-perl vacation
 
Bei Debian Etch hatte ich das Problem, dass die beiden Pakete libmime-charset-perl und libmime-encwords-perl noch nicht verfügbar waren (aktueller Stand: testing). Daher habe ich sie mir von
und
heruntergeladen und per
dpkg -i libmime-encwords-perl_0.040-3_all.deb libmime-charset-perl_0.044-1_all.deb
installiert. Die Version kann abweichen, dann lauten die Dateinamen entspr. anders.
Alternativ:
 
 
Zuerst legen wir den vacation-Benutzer und die Gruppe an:
useradd vacation
groupadd vacation
 
Als nächstes legen wir nun die Tabellen an. Bei einer laufenden Postfix-mySQL-Konfiguration kann man die Tabellen in der gleichen Datenbank ablegen.
 
CREATE TABLE `vacation` (
  `email` varchar(255) NOT NULL default '',
  `subject` varchar(255) NOT NULL default '',
  `body` text NOT NULL,
  `cache` text NOT NULL,
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(4) NOT NULL default '1',
  PRIMARY KEY  (`email`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix - Virtual Vacation';
 
CREATE TABLE `vacation_notification` (
  `on_vacation` varchar(255) NOT NULL default '',
  `notified` varchar(255) NOT NULL default '',
  `notified_at` timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix - Virtual Vacation Notifications';
 
 
Als Grundlage für mein Vorhaben habe ich das postfixadmin-Paket heruntergeladen:
 
Und die dort enthaltene vacation.pl modifiziert. Hier gibt es die modifizierte Version zum Download:
 
In der Datei vacation.pl müssen nun noch einige Punkte geändert werden. Im Bereich Konfiguration ganz oben müssen der Datenbank-Server, Benutzername und Passwort und der Name der Datenbank angegeben werden.
 
Das Skript sollte dann nach /var/spool/vacation kopiert werden:
mkdir /var/spool/vacation
cp vacation.pl /var/spool/vacation
chown -R vacation.vacation /var/spool/vacation
 
Standardmäßig habe ich das Logging aktiviert, die Debugging-Logs aber deaktiviert. Dafür sollte man noch das Verzeichnis anlegen:
mkdir /var/log/vacation
touch /var/log/vacation/vacation.log
touch /var/log/vacation/vacation.debug
chown -R vacation.vacation /var/log/vacation/
 
 
Jetzt müssen für die Domains, für die wir die autoreply-Funktion nutzen wollen, in die Transport-Map von Postfix eingetragen werden.
Dabei nehme ich Subdomains in der Form: auto-reply.meinedomain.tld
Als Ziel in der Transport-Map trägt man vacation ein.
  
Ich verwende in meinem Beispiel diese Konfiguration: www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html,
sodaß die Werte nur in der entspr. Tabelle eingetragen werden müssen. That's it.
 
 
Damit der Dienst vacation auch in Postfix bekannt ist, muß er in der Datei /etc/postfix/master.cf eingetragen werden:
vacation     unix  -       n       n       -       -       pipe
  flags=Rhu user=vacation argv=/var/spool/vacation/vacation.pl
 
 
 
Ok, schlußendlich muß nun eine Kopie unserer Mails an den neuen Dienst ge-"pipe"t werden. Findet der Dienst zu der zugehörigen E-Mail-Adresse einen aktiven Eintrag in der Tabelle vacation wird eine Auto-Reply ausgelöst, ansonsten passiert nichts.
Wurde vorher schon eine Auto-Reply an diese Adresse ausgelöst, passiert auch nichts (das speichert vacation in der Tabelle vacation_notification).
 
Um das zu Realisieren, habe ich mich der recipient_bcc_maps bedient. Das bedeutet, dass eine Blindkopie aller Mails an vacation geleitet wird.
Dazu ist ein Eintrag in der /etc/postfix/main.cf notwendig: recipient_bcc_maps = mysql:/etc/postfix/mysql_vacation.cf
 
Die Map selbst sieht dann folgendermaßen aus und bedient sich aus der Tabelle user:
user = postfix
password = post
dbname = postfix
table = users
select_field = CONCAT(SUBSTRING_INDEX(email,'@',1),'@auto-reply.',SUBSTRING_INDEX(email,'@',-1))
where_field = email
additional_conditions = and email IN (SELECT email from vacation WHERE active='1')
hosts = localhost
 
 
So, jetzt noch Postfix neu starten. Das war's.
 
Damit jetzt eine Auto-Reply ausgelöst wird, muß es nun nur noch einen aktiven Eintrag in der Tabelle vacation geben!
 
 
 
Dieser Artikel wurde noch nicht veröffentlicht.