Monitoring message delivery on Postfix (or Cyrus IMAP)

There's mail server based on Postfix. I need to monitor which messages are delivered to end-user? and which are not. In processing of each message I need to get some information from its attachment in XML format. How can I monitor delivery messages this way?

Thanks!


I need to monitor which messages are delivered to end-user? and which are not

All failed and successful deliveries are logged to /var/log/maillog. You may want to use the Nagios's check_logfiles plugin:

Name       : check_logfiles
Arch       : x86_64
Version    : 3.4.2
Release    : 1.el5.rf
Size       : 39 k
Repo       : rpmforge
Summary    : Logfile check  plugin for nagios
URL        : http://sourceforge.net/projects/check-logfiles
License    : GPL
Description: check_logfiles is a plugin for Nagios which searches for patterns in logfiles. It is capable of scanning
           : multiple logfiles and their rotated ancestors in a single run.

Define a command to check this file:

command[check_postfix]=/usr/bin/sudo /usr/local/nagios/libexec/check_logfiles \
    --tag=postfix \
    --logfile=/var/log/maillog \
    --warningpattern="warning" \
    --criticalpattern="critical"

A sample result:

OK - no errors or warnings|postfix_lines=0 postfix_warnings=0 postfix_criticals=0 postfix_unknowns=0


In processing of each message I need to get some information from its attachment in XML format

Do you mean you want to filter some attachment file types. And if so, take a look at the mime_header_checks directive.

Define a header checks by adding the following line to /etc/postfix/main.cf:

mime_header_checks = regexp:/etc/postfix/mime_header_checks

Append some file extensions to this file:

/name=[^>]*\.(exe|bat|bin|sh)/ REJECT

Restart Postfix and test with mutt:

echo "hello" | mutt -s "Test mail" -a attach.sh [email protected]

you should see the rejected message in the log file:

Nov 9 11:35:08 199 postfix/cleanup[27318]: F1649BFB0176: reject: header Content-Disposition: attachment; filename="attach.sh" from local; from= to=: 5.7.1 message content rejected