all repos — site @ eb5ceb8bad0a830d8f6f0b952e745147eec092f6

source for my site, found at icyphox.sh

pages/blog/s-nail.md (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
---
template:
slug: s-nail
title: The S-nail mail client
subtitle: And how to achieve a usable configuration for IMAP/SMTP
date: 2020-05-06
---

TL;DR: Here's my [`.mailrc`](https://github.com/icyphox/dotfiles/blob/master/home/.mailrc).

As I'd mentioned in my blog post about [mael](/blog/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](https://www.sdaoden.eu/code-nail.html) and exchanging
emails with its [very friendly author](https://www.sdaoden.eu). I did it
so you don't have to[^read-man], and I present to you
this guide.

[^read-man]: Honestly, read the man page (and email Steffen!) -- there's
    a ton of useful options in there.

## basic settings

These settings below should guarantee some sane defaults to get started
with. Comments added for context.
```conf
# 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
```

## authentication

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. )

```netrc
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`:

```conf
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:

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

Defining an account is dead simple. 

```conf
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.


## aesthetics

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.*