Skip to main content

Zeitgesteuertes Versenden anhand der Absenderadresse

Diese Anleitung wurde für CentOS 5.5 geschrieben, unter anderen Distribution sollte das mit etwas Mitdenken genauso möglich sein.

Dieses Szenario beschreibt ein Mailrelay, welches eingehende Mails erstmal in eine Queue schiebt, die dann später zeitgesteuert z.B. per Cron abgearbeitet wird.

http://www.murty.net/qgrpx/

Es sind mehrere Queues mit verschiedenen Zeiten möglich. Das Einsortieren in die Queues kann anhand folgender Kriterien konfiguriert werden (das Standard-CF queuegroup kann nur mit Zieldomains umgehen, für die Sortierung anhand Absenderadresse muss die Erweiterung queuegroupx installiert werden):

QFTO:sender@senderdomain.com<@>recipient@recipientdomain.com  qg1
QFTO:<><@>recipient1@recipientdomain1.com                     qg2
QFRM:sender1@senderdomain1.com                                qg3
QFRM:senderdomain2.com                                        qg4
QFRM:<>                                                       qg5
QGRP:recipient2@recipientdomain2.com                          qg6
QGRP:recipientdomain3.com                                     qg

Installation und Konfiguration

Das bei sendmail mitgelieferte CF-Script queuegroup kann die Sortierung nur anhand der Zieldomain erledigen (QGRP:recipientdomain3.com qg). Werden die anderen Kriterien benötigt muss die Erweiterung queuegroupx von http://www.murty.net/qgrpx/ installiert werden. Dort steht auch, wie die Erweiterung installiert werden muss. Für CentOS reichts aus, die m4-Datei nach /usr/share/sendmail-cf/feature/queuegroupx.m4 zu legen.

Zuerst müssen die Verzeichnisse für die neuen Queues angelegt und berechtigt werden. Die Default-Queue wandert von /var/spool/mqueue/ nach /var/spool/mqueue/default. Die weiteren Verzeichnisse sind für unserer Queues:

cd /var/spool/mqueue
mkdir default
mkdir adminmails
mkdir apache
chown root.mail *
chmod go-rwx *

In die Datei /etc/mail/sendmail.mc werden folgende Zeilen (ca. ab Zeile 101, unter FEATURE access_db) eingefügt. Achtung, hier wird beim FEATURE zwischen queuegroup und queuegroupx unterschieden!

dnl #
dnl # just queue incoming mails, they are send via cron
define(`confDELIVERY_MODE', `q')dnl
dnl #
dnl # queuegroups for the different senders
FEATURE(queuegroupx)dnl
QUEUE_GROUP(`mqueue', `P=/var/spool/mqueue/default, R=5, r=15, F=f, Interval=1h')dnl
QUEUE_GROUP(`adminmails', `P=/var/spool/mqueue/adminmails, R=5, r=15, F=f, Interval=1h')dnl
QUEUE_GROUP(`apache', `P=/var/spool/mqueue/apache, R=5, r=15, F=f, Interval=1h')dnl
dnl #

der DeliveryMode wird auf q gesetzt, d.h. alle eingehenden Mails werden nur in eine Queue gesteckt und nicht weiter bearbeitet. Danach werden die verschiedenen Queues konfiguriert.

In der Datei /etc/mail/access müssen jetzt noch die Kriterien für die Sortierung konfiguriert werden (ich verwende hier queuegroupx für die Sortierung anhand des Absenders):

QFRM:root@localhost       adminmails
QFRM:apache@localhost     apache

Alle Mails, die keine Treffer bei den obigen Regeln haben, werden in die Standardqueue mqueue einsortiert.

Damit der Server auch als Relay verwendet werden kann, müssen noch die erlaubten Netze konfiguriert werden, aus denen Mails eingeliefert werden dürfen (oder ihr konfiguriert SMTP-Auth):

In /etc/mail/access z.B. folgendes eintragen, um den Servern in den Netzen 192.168.60.0/24 und 10.11.12.0/24 das relayen von Mail über diesen Server zu erlauben:

Connect:192.168.60			RELAY
Connect:10.11.12			RELAY

Außerdem muss sendmail noch so konfiguriert werden, dass es auch auf den externen IP-Adressen lauscht. Dazu in /etc/mail/sendmail.mc die folgende Datei auskommentieren.

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

jetzt muss nur noch ein Cronjob konfiguriert werden, der den Queuerun startet, damit die Mails auch verschickt werden:

*/30 * * * * sendmail -vqR -qGmqueue
0 0 * * * sendmail -vqR -qGadminmails
0 0 * * * sendmail -vqR -qGapache