New GNU ELPA package: minimail - Simple, non-blocking IMAP email client

Sacha Chua <[email protected]> Mon, 13 Oct 2025 09:50:19 -0400
Newsgroups gmane.emacs.announce
Message-ID <[email protected]>
    Summary: Simple, non-blocking IMAP email client
   Requires: emacs-30.1
    Website: https://github.com/astoff/minimail
   Keywords: mail=20
 Maintainer: Augusto Stoffel <[email protected]>
     Author: Augusto Stoffel <[email protected]>

                               =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81
                                MINIMAIL
                               =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81


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.

=E2=80=A2 =E2=98=91 Read messages, including MIME (rendering via Gnus)
=E2=80=A2 =E2=98=91 Compose, reply to and forward messages
=E2=80=A2 =E2=98=91 Multi-account support
=E2=80=A2 Search
  =E2=80=A2 =E2=98=91 Full text
  =E2=80=A2 =E2=98=90 Structured (by sender, subject, etc.)
=E2=80=A2 Sorting by thread
  =E2=80=A2 =E2=98=91 Simple algorithm based on subject lines
  =E2=80=A2 =E2=98=90 Fancy algorithm based on reference message IDs.
=E2=80=A2 =E2=98=91 Move messages (also archive, move to trash, flag as jun=
k)
=E2=80=A2 =E2=98=90 Mark and operate on sets of messages (move, etc.)
=E2=80=A2 =E2=98=90 "Load more messages" button
=E2=80=A2 =E2=98=90 Notifications (polling or IDLE)
=E2=80=A2 =E2=98=90 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:

=E2=80=A2 =E2=98=90 Caching
=E2=80=A2 =E2=98=90 Connection pool (for concurrent requests)
=E2=80=A2 =E2=98=90 Prefetching of messages in the background


1 Try it out
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90

  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
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Just set `mail-user-agent' to `minimail' and customize the variable
  `minimail-accounts'.  Here is an illustrative example:

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 (setq mail-user-agent 'minimail
  =E2=94=82       minimail-accounts
  =E2=94=82       '((gmail ;; This can be any symbol you like to identify t=
he account
  =E2=94=82 	 :mail-address "[email protected]"
  =E2=94=82 	 :incoming-url "imaps://imap.gmail.com"
  =E2=94=82 	 :outgoing-url "smtps://smtp.gmail.com")
  =E2=94=82 	(work ;; Assuming Evil Corp uses "Google Workspace" as email p=
rovider
  =E2=94=82 	 :mail-address "[email protected]"
  =E2=94=82 	 :incoming-url "imaps://imap.gmail.com"
  =E2=94=82 	 :outgoing-url "smtps://smtp.gmail.com"
  =E2=94=82 	 :signature (file "~/work/.signature"))
  =E2=94=82 	(uni
  =E2=94=82 	 :mail-address "[email protected]"
  =E2=94=82 	 ;; Include a username in the server URLs if it doesn't match
  =E2=94=82 	 ;; your email address.
  =E2=94=82 	 ;; Use `imap' and `smtp' as URL scheme if your server only
  =E2=94=82 	 ;; supports STARTTLS.
  =E2=94=82 	 :incoming-url "imap://[email protected]"
  =E2=94=82 	 :outgoing-url "smtp://[email protected]")))
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  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:

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 machine imap.gmail.com login [email protected] password xxxxxx=
xxxxxxxxxx
  =E2=94=82 machine smtp.gmail.com login [email protected] password xxxxxx=
xxxxxxxxxx
  =E2=94=82=20
  =E2=94=82 machine imap.gmail.com login [email protected] password yy=
yyyyyyyyyyyyyy
  =E2=94=82 machine smtp.gmail.com login [email protected] password yy=
yyyyyyyyyyyyyy
  =E2=94=82=20
  =E2=94=82 machine imap.niceuni.edu login username password zzzzzzzzzzzzzz=
zz
  =E2=94=82 machine smtp.niceuni.edu login username password zzzzzzzzzzzzzz=
zz
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80


[auth-source]
<https://www.gnu.org/software/emacs/manual/html_mono/auth.html>

[this] <https://support.google.com/accounts/answer/185833>


3 Usage
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  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.