Summary: Simple, non-blocking IMAP email client
Requires: emacs-30.1
Website: https://github.com/astoff/minimail
Keywords: mail
Maintainer: Augusto Stoffel <[email protected]>
Author: Augusto Stoffel <[email protected]>
━━━━━━━━━━
MINIMAIL
━━━━━━━━━━
Minimail is a simple, non-blocking IMAP email client for Emacs.
Minimail currently covers the basics needed for reading and replying to
messages. Below is a listing of implemented and planned features.
• ☑ Read messages, including MIME (rendering via Gnus)
• ☑ Compose, reply to and forward messages
• ☑ Multi-account support
• Search
• ☑ Full text
• ☐ Structured (by sender, subject, etc.)
• Sorting by thread
• ☑ Simple algorithm based on subject lines
• ☐ Fancy algorithm based on reference message IDs.
• ☑ Move messages (also archive, move to trash, flag as junk)
• ☐ Mark and operate on sets of messages (move, etc.)
• ☐ "Load more messages" button
• ☐ Notifications (polling or IDLE)
• ☐ OAuth
Being non-blocking doesn't mean Minimail has excellent performance
(spoiler: it doesn't, yet); it simply means that it has one of the
necessary condition for such. In fact, Minimail currently doesn't
include any of these possible optimizations:
• ☐ Caching
• ☐ Connection pool (for concurrent requests)
• ☐ Prefetching of messages in the background
1 Try it out
════════════
Minimail comes pre-configured to access the Emacs mailing lists served
by [Yhetil] via anonymous IMAP. Just type `minimail-find-mailbox' to
try it out.
[Yhetil] <https://yhetil.org/>
2 Configuration
═══════════════
Just set `mail-user-agent' to `minimail' and customize the variable
`minimail-accounts'. Here is an illustrative example:
┌────
│ (setq mail-user-agent 'minimail
│ minimail-accounts
│ '((gmail ;; This can be any symbol you like to identify the account
│ :mail-address "[email protected]"
│ :incoming-url "imaps://imap.gmail.com"
│ :outgoing-url "smtps://smtp.gmail.com")
│ (work ;; Assuming Evil Corp uses "Google Workspace" as email provider
│ :mail-address "[email protected]"
│ :incoming-url "imaps://imap.gmail.com"
│ :outgoing-url "smtps://smtp.gmail.com"
│ :signature (file "~/work/.signature"))
│ (uni
│ :mail-address "[email protected]"
│ ;; Include a username in the server URLs if it doesn't match
│ ;; your email address.
│ ;; Use `imap' and `smtp' as URL scheme if your server only
│ ;; supports STARTTLS.
│ :incoming-url "imap://[email protected]"
│ :outgoing-url "smtp://[email protected]")))
└────
In addition to the above, you need to configure [auth-source] to
supply the passwords. Some email provides require you to first create
an "app password" (for Gmail, see [this]). Then your `~/.authinfo'
file should look something like this:
┌────
│ machine imap.gmail.com login [email protected] password xxxxxxxxxxxxxxxx
│ machine smtp.gmail.com login [email protected] password xxxxxxxxxxxxxxxx
│
│ machine imap.gmail.com login [email protected] password
yyyyyyyyyyyyyyyy
│ machine smtp.gmail.com login [email protected] password
yyyyyyyyyyyyyyyy
│
│ machine imap.niceuni.edu login username password zzzzzzzzzzzzzzzz
│ machine smtp.niceuni.edu login username password zzzzzzzzzzzzzzzz
└────
[auth-source]
<https://www.gnu.org/software/emacs/manual/html_mono/auth.html>
[this] <https://support.google.com/accounts/answer/185833>
3 Usage
═══════
Type `M-x minimail-find-mailbox RET' and select a mailbox from the
list to read your messages. In a mailbox or message buffer, hit `h'
to see a list of available commands.