Skip to main content

MailTidy enables the cleanup of an IMAP mail account by deleteting the accumulated dross while retaining relevant mails.

Project description

MailTidy

MailTidy enables the cleanup of an IMAP mail account by deleteting the accumulated dross while retaining relevant mails.

Much received mail, which while not spam, ceases to be revelant over time. Best practise is to delete these in a timely manner, but who does? Instead accounts become cluttered with irrelevant emails, many never read, until their volumes become too onerous to tidy manually.

Enter MailTidy, which creates a summary for each unique sender domain or each unique sender and allows an action to be performed against each summary. These actions can be filtered by age. For example, to delete mails received from the domain somewhere.com or the unique sender someone@somewhere.com older than 365 days the DELETE action is specified with an age of 365.

Installation

MailTidy can be installed from the PyPi repository or be built and installed from source.

Installation from the PyPi Repository

Run the command pip install mailtidy. This will install the latest version of MailTidy published to the PyPi repository into your active Python environment.

Installation from Source

  1. Python Poetry is used to build, install and publish MailTidy. If not already installed, follow these instructions - https://python-poetry.org/docs/#installation
  2. Clone the source code from the Git repository - https://github.com/sbrewin/mailtidy.git
  3. From the project's root directory execute poetry install to build and install MailTidy into your active Python environment.

Configure the IMAP account

The account details are stored in the YAML formatted file connection_data.yml located in the directory $HOME/.mailtidy. The format of the file is:

imap_server: <imap server address>
port: <imap server port>
email: <email address>
password: <imap server password>

For example:

imap_server: imap.provider.com 
port: 993
email: myaccount@myproveider.com
password: mysecret

IMPORTANT: Secure the credentials stored within connection_data.yml by restricting acesss to the owner.

On *nix type systems, execute the command chmod 600 ~/.mail_tidy/connection_data.yml.

On Windows, right-click on the connection_data file and select > Properties > Security to restrict access.

Help

Help for the commands and options supported by MailTidy is available via the command line. For an oveview use the -help option, which lists the common options and the supported commands. For help with each supported command, precede -help with the name of the command.

python3 -m mailtidy -help  
python3 -m mailtidy summarise -help 
python3 -m mailtidy apply -help 

Workflow

The MailTidy workflow consists of the following steps:

  1. Create summaries by executing python3 -m mailtidy summarise

    This creates a YAML formatted file containing entries for each sender in the configured IMAP account. By default summaries are created for each unique sender domain. Use the -u option to create a summary for each unique sender.

    By default, summaries are written to the file summaries.yml in the current directory. Use the -f option to specify an alternate location.

    Each summary is created with the default action of NONE and an age of 0. If applied, no changes will occur.

    By default, a summary is created per sender domain. To create a summry for each unique sender specify the -uor `--unique`` option.

  2. It can take some time to summarise accounts with a large number of mails. Once done it is recommended that the produced summaries.yml file is copied to avoid the need to run a summary repeatedly while experimenting with the options.

  3. Having created a copy of summaries.yml file edit the original to ammend the required Actions and Ages. Initially, you may wish to process just a subset of the senders. To do this simply leave the summaries for those you do not wish to process alone.

  4. Apply the Actions by executing python3 -m mailtidy apply

    1. Actions can be restricted to a minimum and maximum number of mails recived from a sender.

      To limit an Action to senders who have received a minimum number of mails from a sender. On the command line specify -cn or --min-count with an integer > 0.

      To limit an Action to senders who have received a maximum number of mails from a sender. On the command line specify -cx or --max-count with an integer > 0.

      To limit an Action to senders who have received a number of mails from a sender within a range. On the command line specify both -cn or --min-count and -cx or --max-count. Both with an integer > 0, where the minimum must be <= to the maximum.

    2. Dry runs are supported and recommended prior to making destructive changes. Specify -n or --dry-run on the command line.

Summaries

A MailTidy summary contains:

  • The mail address of the sender
    • This may be the full email of the sender - someone@somewhere.com - or the domain name - somewhere.com
  • A count of the number of mails received from the sender
  • The UTC first date and time a mail from the sender was received
  • The UTC last date and time a mail from the sender was received

Additionally, the summary contains the following fields that describe the action to be applied

  • The action to be taken, default = 'none'
  • The age in days below which the Action is performed, default = 0

MailTidy summaries are serialised in a YAML formatted file using the following format:

- !SenderSummary
  action: !Action 'none'
  age: 0
  count: 68
  first_datetime: 2023-03-18 19:03:03+01:00
  from_: 'someone@somewhere.com'
  last_datetime: 2023-03-18 19:03:03+01:00

The YAML file may use anchors (&) and aliases (*) to abbreviate these definitions. For example, the following defines the NONE action and then references its definition:

- !SenderSummary
  action: &id001 !Action 'none'
  age: 0
  count: 68
  first_datetime: 2023-03-18 19:03:03+01:00
  from_: 'someone@somewhere.com'
  last_datetime: 2023-03-18 19:03:03+01:00
- !SenderSummary
  action: *id001
  age: 0
  count: 1
  first_datetime: 2023-03-18 19:03:03+01:00
  from_: 'someoneelse@elsewhere.com'
  last_datetime: 2023-03-18 19:03:03+01:00

Supported Actions

MailTidy supports the following Actions, each of which is applied to mails from the sender younger than the specified age:

The below lists the supported Python Action enumeration, the action performed and their YAML equivalants...

  • Action.NONE
    • No processing is applied
    • !Action 'none'
  • Action.DELETE
    • Delete the selected mails
    • !Action 'delete'
  • Action.ARCHIVE
    • Move the selected mails to the Archive folder
    • !Action 'archive'
  • Action.PRINT_ALL
    • Print the entire content of the selected emails to stdout
    • !Action 'print_all'
  • Action.PRINT_HEADERS
    • Print the headers of the selected emails to stdout
    • !Action 'print_headers'
  • Action.MBOX
    • Export the selected emails to MBOX format stored in database whose location is specified by the command line option -m or --mbox-path
    • !Action 'mbox'

Future Features

There are many features that might be added to MailTidy. Amongst these are:

Ideas are welcome. Code contibutions particularly so 😏

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mailtidy-1.2.0.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mailtidy-1.2.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file mailtidy-1.2.0.tar.gz.

File metadata

  • Download URL: mailtidy-1.2.0.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0

File hashes

Hashes for mailtidy-1.2.0.tar.gz
Algorithm Hash digest
SHA256 fe9e002014491449c45b73b1f55976b66acc4a0f04de8f0e32c03a04ca2a4d0b
MD5 1833e1b9191e2382d7b2e7e2a4b0d7f0
BLAKE2b-256 73337696706a524862f1b97468e6cc5b25c1321fe0432bbba562037de6988ea1

See more details on using hashes here.

File details

Details for the file mailtidy-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: mailtidy-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0

File hashes

Hashes for mailtidy-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d5d0135b87c967c457321693441bb8966c542c2f7987dc376c0905abbe1e54e
MD5 9c7b4c13b081d69002ac9902b821b29f
BLAKE2b-256 0d89f37574ced456e1b6cd9809ed19953be75fc3d07a433c367de5f44d15b319

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page