NeoMutt provides dedicated config variables to specify credentials for network servers. These include
imap_user
,
imap_pass
,
smtp_user
,
smtp_pass
, etc. There are a few downsides to this approach. For one thing, their use encourages storing usernames and passwords in plain text inside a NeoMutt config file. People have come up with solutions to this, including using gpg-encrypted files and populating
my_
variables via external scripts through
source "/path/to/script|"
. However, once the variables are set, the secrets can be inspected with the
set
command. Also, because these config variables are not account-specific, they have been the cause of a proliferation of ways to mimic per-account setups using a combination of convoluted hooks and macros to modify them on folder change or on a keypress.
The goal of this feature is to get rid of most
_user
and
_pass
variables. To do so, we provide a way of specifying an external command that NeoMutt will call to populate account credentials for network servers such as IMAP, POP, or SMTP. The external command is called with a number of arguments indicating the known properties of the account such as the account type and hostname; the external command provides NeoMutt with a list of additional properties such as username and password.
The variable
account_command
configures an external program to be used to gather account credentials.
set account_command = "/path/to/my/script.sh"
The program specified will be called by NeoMutt with a number of key-value command line arguments.
--hostname val
: the network host name of the service
--username val
: the username for the account. This might be specified in the URL itself, e.g.,
set folder="imaps://me@example.com@example.com"
or with a dedicated existing variable, e.g.
set imap_user=me@example.com
.
--type val
: the type of the account, one of
imap
,
pop
,
smtp
,
nntp
, with an optional trailing
s
if SSL/TLS is required.
The program specified will have to respond by printing to stdout a number of
key: value
lines. NeoMutt currently recognizes the following keys.
login
username
password
Because password can contain any characters, including spaces, we expect lines to match the regex
^([[:alpha:]]+): (.*)$
exactly.