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 envirornment.

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 envvironemnt.

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.

Workflow

The MailTidy workflow consists of the following steps:

  1. Create summaries by executing python 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.

  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 simply leave the summaries for those you do not wish to process alone.

  4. Apply the Actions by executing python mailtidy apply

    1. 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
  • 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@elseswhere.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'

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.0.0.tar.gz (10.9 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.0.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mailtidy-1.0.0.tar.gz
  • Upload date:
  • Size: 10.9 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.0.0.tar.gz
Algorithm Hash digest
SHA256 ad96546704130c365ddac397896e6a9983a3d51b25af12b93116ea875dbe5e04
MD5 371441c1d90908dbecf3e1dca32e6a23
BLAKE2b-256 60ba8832a0a89fb6f3ed9647b4bc78631dbb409133afa5a5132c0b416699efff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mailtidy-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 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.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 18031fe5fce776a39ebe1804ef6f724cf44f3e863b5113b28d52cff5170c424e
MD5 8afcaba134652c7dee0c13d89fc6a177
BLAKE2b-256 3ba43e8247c372b9c5ed837d6aaf0abc698a167d841fb70b75da024cde24431f

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