The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Postfix::Mailq - a fast and reliable mailq-like utility for postfix

VERSION

version 0.01

SYNOPSIS

    my $mq = Postfix::Mailq::get_fast_count();

    # $mq = {
    #     active => 0,
    #     total  => 0,
    #     incoming => 0,
    #     deferred => 0,
    #     # and optionally, hold
    # }

    if (! $mq) {
        die "Something's very wrong?";
    }

    for (sort keys %{$mq}) {
        printf "%s: %-6d\n", $_, $mq->{$_};
    }

DESCRIPTION

This module implements a fast partial replacement for the mailq utility that comes with Postfix, where emphasis in on fast and reliable, not on complete.

It is a Postfix-specific module.

MOTIVATION

Why would you want to use a replacement for mailq?

Because the standard mailq can get very slow and unreliable if your system is under heavy I/O load.

If you use Nagios to monitor your mail queue, the nagios checks will fail if the system in under load, even if your mail queue is not stressed at all.

That sucks and must be fixed.

FUNCTIONS

get_fast_count()

Gets you a fast count of the messages in the spool dirs. Checks in active, incoming, deferred/* by default.

If you want it to check in the hold directory too, then you should supply an additional get_hold option, as in:

    my $mq = Postfix::Mailq::get_fast_count({ get_hold => 1 });

If your postfix spool directory is not in the default (specified by the DEFAULT_SPOOL_DIR constant, usually /var/spool/postfix, then you can specify your own with:

    my $mq = Postfix::Mailq::get_fast_count({
        spool_dir => '/var/local/postfix/spool'
    });

The result is a hash reference with all counts by folder, as in:

    my $mq = Postfix::Mailq::get_fast_count();

    # $mq = {
    #     active => 0,
    #     total  => 0,
    #     incoming => 0,
    #     deferred => 0,
    #     # and optionally, hold
    # }

    if (! $mq) {
        die "Something's very wrong?";
    }

    for (sort keys %{$mq}) {
        printf "%s: %-6d\n", $_, $mq->{$_};
    }

THANKS

Thanks to Bron Gondwana and the Opera Mail team for this code. I just cleaned it up and packaged it for CPAN.

AUTHOR

Cosimo Streppone <cosimo@opera.com>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2011 by Opera Software ASA.

This is free software, licensed under:

  The (three-clause) BSD License