If html_filter fails, meli unwraps it. Also, if it can't find an xdg default app it also fails.
So use xdg-open and open as failsaifes.
But that requires `open` to know it's an html file, so implemented setting temp file extensions as well.
Quoting the docs at meli.conf(5):
```text
custom_compose_hooks [{ name = String, command = String }]
(optional) Custom compose-hooks that run shell scripts.
compose-hooks run before submitting an e-mail.
They perform draft validation and/or transformations.
If a custom hook exits with an error status or prints output to
stdout and stderr, it will show up in the UI as a notification.
Example:
[composing]
editor_cmd = '~/.local/bin/vim +/^$'
embed = true
custom_compose_hooks = [ { name ="spellcheck", command="aspell --mode email --dont-suggest --ignore-case list" }]
```
compose-hooks run before submitting an e-mail.
They perform draft validation and/or transformations.
If a hook encounters an error or warning, it will show up as a notification.
The currently available hooks are:
- past-date-warn
Warn if Date header value is far in the past or future.
- important-header-warn
Warn if important headers (From, Date, To, Cc, Bcc) are missing or invalid.
- missing-attachment-warn
Warn if Subject, draft body mention attachments but they are missing.
- empty-draft-warn
Warn if draft has no subject and no body.
They can be disabled with [composing.disabled_compose_hooks] setting.
Fastmail now uses an API token in a http header for authentication.
This can be used either as a server_password or provided by a
server_password_command like oauth2.
quilt has unconditionally been used in debian/rules since the initial
addition of debian packaging support in commit bb80de.
sqlite3 has been a default feature since at least commit 6ceed3,
possibly longer through rusqlite.
Move the handling of either `server_password` or
`server_password_command` from the imap backend to the common
`AccountSettings` struct and add it for jmap as well.