<- back
view in plain-text

The S-nail mail client

And how to achieve a usable configuration for IMAP/SMTP

TL;DR: Here’s my .mailrc.

As I’d mentioned in my blog post about mael, I’ve been on the lookout for a good, usable mail client. As it happens, I found S-nail just as I was about to give up on mael. Turns out writing an MUA isn’t all too easy after all. S-nail turned out to be the perfect client for me, but I had to invest quite some time in reading the very thorough manual and exchanging emails with its very friendly author. I did it so you don’t have to1, and I present to you this guide.

basic settings

These settings below should guarantee some sane defaults to get started with. Comments added for context.

# enable upward compatibility with S-nail v15.0
set v15-compat

# charsets we send mail in
set sendcharsets=utf-8,iso-8859-1

# reply back in sender's charset
set reply-in-same-charset

# prevent stripping of full names in replies
set fullnames

# adds a 'Mail-Followup-To' header; useful in mailing lists
set followup-to followup-to-honour-ask-yes

# asks for an attachment after composing
set askattach

# marks a replied message as answered
set markanswered

# honors the 'Reply-To' header
set reply-to-honour

# automatically launches the editor while composing mail interactively
set editalong

# I didn't fully understand this :) 
set history-gabby=all

# command history storage
set history-file=~/.s-nailhist

# sort mail by date (try 'thread' for threaded view)
set autosort=date


With these out of the way, we can move on to configuring our account—authenticating IMAP and SMTP. Before that, however, we’ll have to create a ~/.netrc file to store our account credentials.

(This of course, assumes that your SMTP and IMAP credentials are the same. I don’t know what to do otherwise. )

machine *.domain.tld login user@domain.tld password hunter2

Once done, encrypt this file using gpg / gpg2. This is optional, but recommended.

$ gpg2 --symmetric --cipher-algo AES256 -o .netrc.gpg .netrc

You can now delete the plaintext .netrc file. Now add these lines to your .mailrc:

set netrc-lookup
set netrc-pipe='gpg2 -qd ~/.netrc.gpg'

Before we define our account block, add these two lines for a nicer IMAP experience:

set imap-cache=~/.cache/nail
set imap-keepalive=240

Defining an account is dead simple.

account "personal" {
    localopts yes
    set from="Your Name <user@domain.tld>"
    set folder=imaps://imap.domain.tld:993

    # copy sent messages to Sent; '+' indicates subdir of 'folder' 
    set record=+Sent
    set inbox=+INBOX

    # optionally, set this to 'smtps' and change the port accordingly
    # remove 'smtp-use-starttls'
    set mta=smtp://smtp.domain.tld:587 smtp-use-starttls

    # couple of shortcuts to useful folders
    shortcut sent +Sent \
        inbox +INBOX \
        drafts +Drafts \
        trash +Trash \
        archives +Archives

# enable account on startup
account personal

You might also want to trash mail, instead of perma-deleting them (delete does that). To achieve this, we define an alias:

define trash {
    move "$@" +Trash

commandalias del call trash

Replace +Trash with the relative path to your trash folder.


The fun stuff. I don’t feel like explaining what these do (hint: I don’t fully understand it either), so just copy-paste it and mess around with the colors:

# use whatever symbol you fancy
set prompt='> '

colour 256 sum-dotmark ft=bold,fg=13 dot
colour 256 sum-header fg=007 older
colour 256 sum-header bg=008 dot
colour 256 sum-header fg=white
colour 256 sum-thread bg=008 dot
colour 256 sum-thread fg=cyan

The prompt can be configured more extensively, but I don’t need it. Read the man page if you do.

essential commands

Eh, you can just read the man page, I guess. But here’s a quick list off the top of my head:

  • headers: Lists all messages, with the date, subject etc.
  • mail: Compose mail.
  • <number>: Read mail by specifiying its number on the message list.
  • delete <number>: Delete mail.
  • new <number>: Mark as new (unread).
  • file <shortcut or path to folder>: Change folders. For example: file sent

That’s all there is to it.

This is day 2 of the #100DaysToOffload challenge. I didn’t think I’d participate, until today. So yesterday’s post is day 1. Will I keep at it? I dunno. We’ll see.

  1. Honestly, read the man page (and email Steffen!)—there’s a ton of useful options in there. 

Questions or comments? Send an email to ~icyphox/x@lists.sr.ht—my public inbox.

How To Track Desert Locust Swarms

Billions of desert locusts are swarming across East Africa, multiplying in numbers over several months of favorable rain and breeding conditions, creating what the UN Food and Agriculture Organization (FAO) called an “unprecedented threat to food security,…

via bellingcat on Jun 23, 2020

OpenBSD on the Microsoft Surface Go 2 (notaweblog)

I used OpenBSD on the original Surface Go back in 2018 and many things worked with the big exception of the internal Atheros WiFi. This meant I had to keep it tethered to a USB-C dock for Ethernet or use a small USB-A WiFi dongle plugged into a less-than-…

via joshua stein on May 15, 2020

25/05/2020: This month in KISS (#2)

Welcome to the second monthly update for KISS. This post will be quite a long one, we've seen some nice changes this month and some great work by the Community.…

via KISS Linux Blog on May 25, 2020

Generated by openring.py





last updated
76b554e on 2020-06-24


Some of my friends and internet bros.


More about me and my work.