20 releases (9 breaking)
0.10.3 | Sep 4, 2024 |
---|---|
0.9.0 | Aug 28, 2024 |
0.3.0 | Jul 31, 2024 |
#120 in Email
60KB
1.5K
SLoC
ma
Mail Archivist. Downloads all mail from multiple accounts into a SQLite database, for backup and analysis.
Usage
Environment
- install rust: https://www.rust-lang.org/tools/install
- ensure
$HOME/.cargo/bin
is in your$PATH
cargo install ma
Initial
cd $mail_archive_directory
(any directory in which you wantma
to maintain the mail archive)ma fetch
(will generate initial config file and then exit with a failure to connect)- Create an App Password with your provider, for example:
- Google/Gmail: https://myaccount.google.com/apppasswords
- Fastmail: https://app.fastmail.com/settings/security/integrations
- Runbox: https://runbox.com/mail/account_security
$EDITOR ma.toml
(fill in the correct values in the generated config file)ma fetch
(should now work)
Routine
Like with git
, you can either cd
into $mail_archive_directory
or provide
it to ma
as an argument, like so:
ma --dir $mail_archive_directory fetch
to updatesqlite3 $mail_archive_directory/ma.db
to enjoy exploring your mail archive with SQL!
TODO
- fetch all messages from all mailboxes from all accounts
- store raw messages in content-addressed file tree (
dump/[hash..2]/[hash].eml.gz
) - insert headers and text body into SQLite
- store state, the highest seen msg per account per mailbox, and avoid re-downloads
- fetch directly to database and rebrand file-tree storing as
export
- snapshot (log?) mailboxes and message locations
- poll/idle for new messages (maybe not necessary, since once can just periodically re-fetch)
- post-update hooks (Can be used for custom notifications, aggregate query reruns, etc.)
- timeouts
- parallelize fetch
- parallelize import/export
- example analytics
-
Received
based route trace graph -
From -> To
directed graph with edges weighted by- frequency
- msg size
-
- export into
InfluxDB
or something similar that Grafana can read from
Questions
Automatic Address Book
How to measure confidence in sender/receiver identity, given that:
- any name can have any address
- any address can have any name
Dependencies
~73MB
~1.5M SLoC