GNU ELPA - minimail

minimail Atom Feed

Description
Simple, non-blocking IMAP email client
Latest
minimail-0.1.1.tar (.sig), 2025-Oct-13, 90.0 KiB
Maintainer
Augusto Stoffel <arstoffel@gmail.com>
Website
https://github.com/astoff/minimail
Browse ELPA's repository
CGit or Gitweb
Badge

To install this package from Emacs, use package-install or list-packages.

Full description

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.

  • [X] Read messages, including MIME (rendering via Gnus)
  • [X] Compose, reply to and forward messages
  • [X] Multi-account support
  • Search
    • [X] Full text
    • [ ] Structured (by sender, subject, etc.)
  • Sorting by thread
    • [X] Simple algorithm based on subject lines
    • [ ] Fancy algorithm based on reference message IDs.
  • [X] 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.

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 "somebody@gmail.com"
	 :incoming-url "imaps://imap.gmail.com"
	 :outgoing-url "smtps://smtp.gmail.com")
	(work ;; Assuming Evil Corp uses "Google Workspace" as email provider
	 :mail-address "webmaster@evilcorp.com"
	 :incoming-url "imaps://imap.gmail.com"
	 :outgoing-url "smtps://smtp.gmail.com"
	 :signature (file "~/work/.signature"))
	(uni
	 :mail-address "somebody@math.niceuni.edu"
	 ;; 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://username@imap.niceuni.edu"
	 :outgoing-url "smtp://username@smtp.niceuni.edu")))

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 somebody@gmail.com password xxxxxxxxxxxxxxxx
machine smtp.gmail.com login somebody@gmail.com password xxxxxxxxxxxxxxxx

machine imap.gmail.com login webmaster@evilcorp.com password yyyyyyyyyyyyyyyy
machine smtp.gmail.com login webmaster@evilcopr.com password yyyyyyyyyyyyyyyy

machine imap.niceuni.edu login username password zzzzzzzzzzzzzzzz
machine smtp.niceuni.edu login username password zzzzzzzzzzzzzzzz

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.