Visually cluster your emails by sender, domain, and more to identify waste

Overview

license Rust CI

Postsack

A high level visual overview of swaths of email

TLDR! A web demo that shows how Postsack clusters a set of 10.000 fake emails

Do you have many emails? I have a lot of emails. I'm not a inbox zero person. I recently realized that my Gmail account contains roughly 650.000 emails. I looked at that and I began to wonder.. Why?.. Sure, I've been using Gmail since 2004 but still, that's 38.000 Emails per year which strikes me as a bit on the crazy side of things. I wanted to know where these mails came from.

Gmail did not offer an easy way of visualizing all my emails, I also couldn't find a tool for it. Hence I build my own. It parses all your mails and shows configurable clusters of mails in a nice visualization.

It looks like this

Example

Features

  • Written in Rust: Very fast email parsing / import. My 650k mails are imported in ~1 Minute on a Macbook M1 Pro Max and ~ 2 Minutes on a Intel Core i7-8700B 3.2 Ghz.
  • Import all your local mails (currently, only MBox, Apple Mail and Gmail Backups are supported)
  • Build up clustered visualizations of your mails to see and understand what kind of emails you have
  • Cluster the emails by sender domain / name, month, day, year, name, and some more
  • Additional filters for seen mails or tags / labels
  • See all the mails for the current set of filters / current cluster
  • Save the generated database as a SQLite file so you can do additional queries yourself (or open it again)
  • Cross platform (macOS (from 10.12 on), Windows, Linux and a Web Demo)
  • The app is 13MB big and consumes ~150MB of memory on macOS

The look is similar on all platforms as it uses the Rust egui GUI library.

Videos

Here's a video showing the UI in action (e.g. me selecting some mail clusters)

postsack_video.mp4

Here's another video where you can see the importer importer 650k mails (it is a bit boring but.)

postsack_importer_video.mp4

Web Demo

In addition to that, you can also play around with some fake data in this Postsack Web Demo

Using It

Currently, Postsack supports three different types of mail storage:

There're open issues for other formats such as maildir, notmuch or Outlook but if you use one of these formats your best bet would be to export your emails as MBox which seems to be something most mail apps support. Alternatively, I'd be more than happy for PR's implementing additional Mail Storage Formats.

If you have mails in any of the archives above, you can start Postsack select the folder with the emails and it will do the rest.

Current State

I've created issues for some of the missing functionality. Most importantly more email formats (as explained above). Beyond that, there're probably bugs, there's a certain lack of tests and documentation, the windows build is on shaky grounds, the light theme is wonky, some parts need a healthy refactoring to be useful beyond Postsack, and it would be great if the binaries could be generated from the Github actions.

Deploying to crates.io for cargo install

One of the issues I ran into was that many of the emails I had received over the years were not properly standards compliant. I forked email-parser, email parser that Postsack is using in order to support all the weird issues I encountered. However, this PR still needs a couple of enhancements before it will be merged into email-parser. Therefore, Postsack is currently dependent on a fork of a crates.io crate. This means that I can't deploy this to crates yet. Once The aforementioned pull request has been improved and merged, I will subsequently draft a crates.io release.

Overview

Here's an overview of the different crates in the Postsack Workspace:

Why Egui?

I had build an app in Druid last year and I liked the experience. This time I wanted to try out a different Rust gui library. Between Iced and Egui I went with the latter because the terse code examples were tempting. Also, I had heard good things about it.

I might want to try to re-implement the postsack ui in another UI library. However something I really dig about egui is how quickly it allows building a simple UI for a specific task (say you want to automate a certain bash script). The main downside was that it is currently very limited in what it can do (e.g. available widgets, configuration, layout options, etc).

What does Postsack mean?

Postsack (or Postbeutel) is German for a bag full of mail

Can I also delete the selected clusters?

Currently you can't. I wanted to add this as a feature but it is quite involved. I might start working on this next.

Comments
  • Pre-compiled binaries for older macOS versions

    Pre-compiled binaries for older macOS versions

    Very cool project, and I just wanted to try it out (without pulling the repo and compiling myself). Sadly, the pre-compiled macOS binary only seems to work for macOS 12 (Monterey) and later.

    It would be great if you can provide pre-compiled binaries that work on older versions too.

    I see you already set the osx_minimum_system_version to 10.14, but it seems that didn't have the desired effect or was it maybe added after the initial release was made?

    opened by dnaka91 4
  • Fix macOS version

    Fix macOS version

    This should allow Postsack to run on older macOS versions. I got it to run on High Sierra, however it crashes on start because I'm only running it in a VM (Virtualbox) and apparently Glutin requires multi-sampling which most VM's don't support. It should work fine on real hardware though.

    opened by terhechte 0
  • Cleanup Dependencies

    Cleanup Dependencies

    • Uses cargo udeps to detect unused dependencies
    • Exports a couple of dependencies from ps-core via pub use ... so that they're only added to one Cargo.toml and not multiple
    opened by terhechte 0
  • WASM Support

    WASM Support

    This PR adds WASM support. As a browser target can't read emails, this PR includes a bunch (5000) of generated fake data emails from https://generatedata.com/generator.

    Screenshot 2021-12-17 at 14 07 34
    opened by terhechte 0
  • Initial Linux support

    Initial Linux support

    This PR fixes Linux build errors, adds some Linux documentation (currently mostly how to make it work under Fedora and Ubuntu) and improves the theming system to look ok'ish under Linux.

    It also fixes the MBOX importer to support multiple files (e.g. INBOX.mbox, WORK.mbox, SENT.mbox) which is how mbox works.

    opened by terhechte 0
  • A Cleanup branch that took a life of its own

    A Cleanup branch that took a life of its own

    Initially intended as a branch to clean up the structure, it evolved into a large rewrite and feature branch instead. As I was developing most of the app on a variety of trains and remote places, I regret nothing.

    opened by terhechte 0
  • Killed

    Killed

    Hi there! I tried to run this on my single maildir. After about 30 minutes the process dies:

    Basic Structure swappy-20220127_183440

    The setup: Screenshot from 2022-01-27 18-36-02

    When it's processing:

    Screenshot from 2022-01-27 18-36-32

    When it hangs, it only adds one additional line that says killed

    P.S. Thanks for the Nix shell file. That rocks!!

    opened by jevy 2
  • Discontinue use of the dedicated GPU on Intel MacBook Pros

    Discontinue use of the dedicated GPU on Intel MacBook Pros

    Postsack causes MacBook Pros with two GPUs to switch to the dedicated GPU, causing increased battery drain.

    There's no reason I can see why it would need to do that; I presume it's a consequence of the Egui library usage.

    Please investigate and fix, so battery life usage can decrease. Thanks!

    opened by ideologysec 6
  • Add 'postsack-cli' for running the postsack engine on the command-line

    Add 'postsack-cli' for running the postsack engine on the command-line

    Directly motivated by my inability to store databases in a known location which led to a fix of its root cause, instead of waiting for the patches to arrive I thought it would be useful to lay the foundation for a CLI of postsack.

    With it, one can currently import mailboxes and store databases for later consumption in the GUI.

    Using the database is also paramount for inspection and potentially implementing more filters (#28).

    Note that tests are absent right now as I don't know the preferences just yet, in case such a CLI is welcome at all.

    opened by Byron 3
  • Improvements to filters to help finding huge emails

    Improvements to filters to help finding huge emails

    When receiving emails with attachments, the mailbox may get bloated.

    Especially in conjunction with eventually deleting emails as in #16 , it would be useful to add filters specific to the size of an email.

    Possible filters

    Items marked with MVP seem desirable to have in the first incarnation.

    • min size in Kb (MVP)
      • a slider to filter emails smaller than the minimum size.
      • Probably '0' as value would mean the filter is disabled, but there might be better ways to indicate this from a UX perspective.
    • attachment
      • a checkbox to require emails to have an attachment
      • file extension multi-selection
        • Lists all actually used extensions and allows to focus on emails which have at least one of them.

    Possible GUI Improvements

    Extended statistics about displayed emails

    Along with knowing how many emails are currently displayed, it would certainly be useful how much storage space they require. Maybe this information could be added to the top of the GUI.

    Screen Shot 2022-01-04 at 10 02 22 AM

    Real-time updates when changing the filter

    This would allow to remove the 'apply' button and would probably make it fun to play with sliders. It might also be an interesting exercise in async programming to make it deal with possibly longer filtering times gracefully. If filtering through 650k emails gets sluggish, one might consider throwing multiple threads into the mix.

    opened by Byron 4
  • Improve the deployment GitHub Action

    Improve the deployment GitHub Action

    The yaml currently contains the hard coded version for the generated deb package. This can probably be read from the environment. Apart from that, it might also be useful to generate Fedora packages and maybe even ARM64 builds?

    opened by terhechte 0
Releases(v1.0.2)
Owner
Benedikt Terhechte
Benedikt Terhechte
Send nice emails

Jolimail is an open source alternative to all the transactionnal email solutions. Why did we build jolimail? Jolimail comes from the frustration of us

Jérémie Drouet 100 Dec 20, 2022
A small unofficial library to send emails using Sendgrid.

sendgrid_thin A thin wrapper around the SendGrid V3 API. It does not use the crate tokio or hyper and is therefore very lightweight and do not interfe

Reinaldo Rozato Junior 3 Nov 17, 2022
This app reads a csv file and sends an email with a formatted Handlebars file.

Bulkmail This app reads a csv file and sends an email with a formatted Handlebars file. This can be run on Linux for AMD64 and ARMv7. Upstream Links D

Giovanni Bassi 17 Nov 3, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023
Rust library that helps you change the domain of the link to another domain 🦀🔐

Rust library that helps you to change the domain of the link to another domain, the library helps with privacy. It can be used to change the domain of sites that do not care about privacy to another that does.

TheAwiteb 2 Mar 28, 2022
Crash recovery for Darktide. There's heresy to be smote and no time to waste.

Darktide Rebooter ?? ↪️ ?? Automatically boot the game up again (and bypass the launcher) immediately after a crash. There's heresy to be smote and no

Ron Au 3 Apr 12, 2023
Rust implementation of catapulte email sender

Catapulte What is catapulte? Catapulte is an open source mailer you can host yourself. You can use it to quickly catapult your transactionnal emails t

Jérémie Drouet 108 Dec 14, 2022
audioviz is a libary to transform raw audiodata to be visually pleasing.

audioviz A modular and simple libary to make raw and realtime audiodata captured for example from cpal visually more appealing. It is not intended for

null 16 Sep 23, 2022
weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

weggli Introduction weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify int

Google Project Zero 2k Jan 5, 2023
A tool to identify related SSL keys, CSRs, and certificates.

⛓ sslchains A tool to identify related SSL keys, CSRs, and certificates. Usage Default Display Mode Run with any number of path arguments to define th

Gary Locke 1 Apr 2, 2022
A Solidity static analyzer to identify contract vulnerabilities and gas efficiencies.

solstat A Solidity static analyzer to identify contract vulnerabilities and gas efficiencies. .------. .------. .------. .------. .------. .------. .-

null 345 Feb 18, 2023
The fastest way to identify any mysterious text or analyze strings from a file, just ask `lemmeknow` !

The fastest way to identify anything lemmeknow ⚡ Identify any mysterious text or analyze strings from a file, just ask lemmeknow. lemmeknow can be use

Swanand Mulay 594 Dec 30, 2022
Announce blogs and send emails. Originally built for ConnectDome.

ConnectDome - Rust Notify A simple service to announce new blogs on your Slack/Discord + send emails to your list via your TES. Feature 1: Posts blogs

ConnectDome 3 May 8, 2022
An utility to help developers manage their emails, notes and tasks effectively

nitride An admin dashboard built on Vue.js, TypeScript, Rust, and PostgreSQL. See the User Interface source code here. Requirement Rust v1.63 or great

ADEOYE Adefemi 10 Dec 27, 2022
Northstar is a horizontally scalable and multi-tenant Kubernetes cluster provisioner and orchestrator

Northstar Northstar is a horizontally scalable and multi-tenant Kubernetes cluster provisioner and orchestrator. Explore the docs » View Demo · Report

Lucas Clerisse 1 Jan 22, 2022
Send nice emails

Jolimail is an open source alternative to all the transactionnal email solutions. Why did we build jolimail? Jolimail comes from the frustration of us

Jérémie Drouet 100 Dec 20, 2022
Send emails right from the terminal using Rust!

Send emails right from the terminal using Rust!

Dhravya Shah 7 Dec 21, 2022
A small unofficial library to send emails using Sendgrid.

sendgrid_thin A thin wrapper around the SendGrid V3 API. It does not use the crate tokio or hyper and is therefore very lightweight and do not interfe

Reinaldo Rozato Junior 3 Nov 17, 2022
A Python package written in Rust for email verification without sending any emails.

PyRustify PyRustify is a Python package written in Rust that verifies the email addresses. Features Feature Description Syntax validation Checks if th

Mng 8 Apr 16, 2023
Detects orphan configmaps and secrets in a Kubernetes cluster

KubExplorer Warning: Proof of concept. Feedback is much welcome. Discovers and prints out any Configmaps and Secrets not linked to any of the followin

Pavel Pscheidl 56 Oct 21, 2022