Skip to content

outini/pymailq

Repository files navigation

PythonPIP PythonSupport License Codacy Coverage RTFD Travis

pymailq - Simple Postfix queue management

Contact: Denis 'jawa' Pompilio <[email protected]>

A full content documentation, is online at https://pymailq.readthedocs.io/en/latest/

The pymailq module makes it easy to view and control Postfix mails queue. It
provide several classes to store, view and interact with mail queue using
Postfix command line tools. This module is provided for automation and
monitoring developments.

This project also provides a shell-like to interact with Postfix mails queue.
It provide simple means to view the queue content, filter mails on criterias
like Sender or delivery errors and lead administrative operations.

Installation

Install pymailq module from https://pypi.python.org:

pip install pymailq

Install pymailq module from sources:

python setup.py install

A SPEC file is also provided for RPM builds (currently tested only on Fedora), thanks to Nils Ratusznik (https://github.com/ahpnils). Debian binary packages are also available.

Requirements

This module actually support the following Python versions:

  • Python 2.7
  • Python 3+

A shell is provided for interactive administration. Based on Python cmd module, using Python compiled with readline support is highly recommended to access shell's full features.

Using the shell

Mails queue summary:

~$ pqshell --summary

====================== Mail queue summary ========================
Total mails in queue: 1773
Total queue size: 40.2 MB

Mails by accepted date:
    last 24h:          939
    1 to 4 days ago:   326
    older than 4 days: 173

----- Mails by status ----------    ----- Mails by size ----------
Active      2                       Average size      23.239 KB
Hold        896                     Maximum size    1305.029 KB
Deferred    875                     Minimum size       0.517 KB

----- Unique senders -----------    ----- Unique recipients ------
Senders     156                     Recipients          1003
Domains     141                     Domains              240

----- Top senders ------------------------------------------------
228    [email protected]
195    [email protected]
116    MAILER-DAEMON
105    [email protected]
61     [email protected]

----- Top sender domains -----------------------------------------
228    domain-1.tld
195    domain-4.tld
105    domain-2.tld
75     domain-0.tld
61     domain-3.tld

----- Top recipients ---------------------------------------------
29     [email protected]
28     [email protected]
23     [email protected]
20     [email protected]
20     [email protected]

----- Top recipient domains --------------------------------------
697    domain-7.tld
455    domain-5.tld
37     domain-6.tld
37     domain-9.tld
34     domain-8.tld

Using the shell in interactive mode:

~$ pqshell
Welcome to PyMailq shell.
PyMailq (sel:0)> store load
500 mails loaded from queue
PyMailq (sel:500)> show selected limit 5
2017-09-02 17:54:34 B04C91183774 [deferred] [email protected] (425B)
2017-09-02 17:54:34 B21D71183681 [deferred] [email protected] (435B)
2017-09-02 17:54:34 B422D11836AB [deferred] [email protected] (2416B)
2017-09-02 17:54:34 B21631183753 [deferred] [email protected] (425B)
2017-09-02 17:54:34 F2A7E1183789 [deferred] [email protected] (2416B)
...Preview of first 5 (495 more)...
PyMailq (sel:500)> show selected limit 5 long
2017-09-02 17:54:34 B04C91183774 [deferred] [email protected] (425B)
  Rcpt: [email protected]
   Err: Test error message
2017-09-02 17:54:34 B21D71183681 [deferred] [email protected] (435B)
  Rcpt: [email protected]
   Err: Test error message
2017-09-02 17:54:34 B422D11836AB [deferred] [email protected] (2416B)
  Rcpt: [email protected]
   Err: mail transport unavailable
2017-09-02 17:54:34 B21631183753 [deferred] [email protected] (425B)
  Rcpt: [email protected]
   Err: mail transport unavailable
2017-09-02 17:54:34 F2A7E1183789 [deferred] [email protected] (2416B)
  Rcpt: [email protected]
   Err: mail transport unavailable
...Preview of first 5 (495 more)...
PyMailq (sel:500)> select error "Test error message"
PyMailq (sel:16)> show selected rankby sender
sender                                    count
================================================
[email protected]                  7
[email protected]                  3
[email protected]                  2
[email protected]                  1
[email protected]                  1
[email protected]                  1
[email protected]                  1
PyMailq (sel:16)> select sender [email protected]
PyMailq (sel:7)> super hold
postsuper: Placed on hold: 7 messages
PyMailq (sel:7)> select reset
Selector resetted with store content (500 mails)
PyMailq (sel:500)> show selected rankby status
status                                    count
================================================
deferred                                  493
hold                                      7
PyMailq (sel:500)> exit
Exiting shell... Bye.

Packaging

Binary packages for some linux distribution are available. See the packaging directory for more information.

License

"GNU GENERAL PUBLIC LICENSE" (Version 2) (see LICENSE file)