• Stars
    star
    347
  • Rank 122,141 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 3 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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 Maildir, 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.

Installation

For macOS, Linux or Windows install instructions, please refer to the Readme in the postsack-native folder

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.

More Repositories

1

SourceKittenDaemon

Swift Auto Completions for any Text Editor
Swift
528
star
2

Ebou

A cross platform Mastodon Client written in Rust
Rust
464
star
3

CoreValue

Lightweight Framework for using Core Data with Value Types
Swift
457
star
4

twitvault

Easily Archive and Search Your Twitter Data with our Syncable Desktop App
Rust
143
star
5

appventure-blog

My Clojure/Static-Based Blog.
CSS
82
star
6

OceanBar

A fancy Digital Ocean API client for Mac OS X 10.9+
Objective-C
70
star
7

gitsi

Git Status Interactive
C
36
star
8

bevy_quickmenu

A simple-to-use menu system for Bevy which supports gamepad, keyboard or mouse navigation
Rust
23
star
9

Swijito

An Apple iCloud Photostream Client written in Swift
Swift
21
star
10

TextMateSwiftCompletion

Swift Completions for Textmate
Swift
19
star
11

SwiftWadReader

Example of how to use Swift 3 in order to read a Doom WAD file
Swift
18
star
12

rust-catalyst-example

Example Project to show how to build a Catalyst static library with Rust
Swift
17
star
13

navicula

Rust
14
star
14

rust-ios-android-example

Rust
13
star
15

VimConfiguration

My new, personal, vim configuration. Based on Vundle.
Vim Script
13
star
16

CX11.swift

Swift Package for X11
Swift
13
star
17

swift-x11-example

A simple example that shows how to write a X11 app on Linux in Swift using the new package manager
Swift
12
star
18

NSSpain2020Code

The code for my NSSpain 2020 Talk: GeometryReader, View Preferences and Anchors - SwiftUI tales from the Hyperdeck
Swift
9
star
19

Parsepaper

Link Taskpaper files with Git commit so that commit messages automatically include the @done tasks from the task paper file.
Ruby
9
star
20

Difflocal

Compare Localizable.strings files for changes
Python
8
star
21

pragma2017-example-code

Unidirectional Data Flow Examples
Swift
6
star
22

tryswift-macos-workshop

Swift
6
star
23

watchout

Automatically run scripts and reload images
Rust
6
star
24

SpacemacsConfig

My personal Spacemacs config.
Emacs Lisp
5
star
25

belum

A lightweight, experimental, type-safe dependency injection container (cough) for Swift
Swift
5
star
26

cljs-animated-wwdc2014

Animated WWDC 2014 Logo in ClojureScript
JavaScript
4
star
27

luapsql

A high speed C binding to PostgreSQL's libpq for quick access to databases. Includes support for array columns and json columns. Forked from Luis Carvalho.
C
3
star
28

SwiftHeroesCatalystAppKit

Swift
3
star
29

nsspain18-cocoa-bindings-workshop

Swift
3
star
30

Cederic

Agents for Swift: Non-blocking, thread-safe, asynchrounous access & modification of shared data/state
Swift
3
star
31

timezone-abbreviations

Translate non-standardized abbreviations such as 'GMT' to timezone information on a best guess basis.
Rust
3
star
32

senor-pacbomber

The unholy combination of PacMan and Bomberman: El Seรฑor Pacbomber. For the Bevy Jam #2
Rust
2
star
33

tted

Render rich text and emoji on the GPU or CPU using Forma
Rust
2
star
34

cryptsy-python-api

A Python implementation of the Cryptsy-API (https://www.cryptsy.com/)
Python
2
star
35

appventure.me-codebase

The Jekyll Code that powers appventure.me + The git that has all the posts
Ruby
2
star
36

Google-Web-History-Downloader

Google Web History Downloader
Ruby
2
star
37

uniffi-swift-async-example

Quick example showing how to use uniffi with swift and async
Swift
2
star
38

nsspain2023workshop

Rust
2
star
39

aargh

No Chrome Fullscreen Mac OS X Browser for HTML5 Slideshows/Presentations
Objective-C
1
star
40

CatalystMaterial

Swift
1
star
41

appventure

Appventure Codebase
HTML
1
star
42

techou

Custom Rust static site engine. Terrible code, probably full of bugs. Works for my use cases.
Rust
1
star
43

appbuilders2022

Shell
1
star
44

PhotoSetManager

Group loads of pictures based on metadata
Objective-C
1
star
45

lempel

Gzip for Swift as a Carthage-Compatible framework
Swift
1
star
46

emlx

Parse Apple Mail.app `Emlx` Files.
Rust
1
star
47

EmacsConfiguration

My private Emacs configuration utilizing Evil to feel almost like vim
Emacs Lisp
1
star
48

Vim---Bash-Configuration

My Vim Configuration, based on http://github.com/evilchelu/braid, and my Bash Config
Python
1
star
49

GameAssetOrganizer

A Mac tool that helps in sorting game assets into a level pack / level structure so that these can be transformed into sprite sheets.
Objective-C
1
star
50

stripe_bug_cocoa_example

There's an issue on Mac OS X 10.8 and 10.9 where CSS/JS Animation heavy contents in a Layer-Backed WebView do not draw correctly. This affects the Stripe Checkout form which does not display at all on those older operating systems. The bug seems to be fixed in 10.10 Yosemite.
Objective-C
1
star
51

parse_most_visited_websites

A Simple collection for scripts to generate a list of frequently visited websites and analyze it in order to find out which is the best partitioning scheme for a PostgreSQL database partitioning. Also includes code to generate the necessary SQL.
Clojure
1
star