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.
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.
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!