20 releases (9 breaking)
| 0.10.3 | Sep 4, 2024 |
|---|---|
| 0.9.0 | Aug 28, 2024 |
| 0.3.0 | Jul 31, 2024 |
#178 in Email
1,321 downloads per month
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/binis in your$PATH cargo install ma
Initial
cd $mail_archive_directory(any directory in which you wantmato 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 fetchto updatesqlite3 $mail_archive_directory/ma.dbto 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
-
Receivedbased route trace graph -
From -> Todirected graph with edges weighted by- frequency
- msg size
-
- export into
InfluxDBor 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
~70MB
~1.5M SLoC