email: make PGP private key optional
Services other than meta.sr.ht don't really have a use for the
private PGP key.
Add a CanPGPSign method so that meta.sr.ht can emit a warning or
error when the PGP key is missing.
email: improve mail.ParseAddress error message
email: EnqueueStd: set Content-Type with charset=UTF-8 instead of just text/plain
Mails are now
--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
=D1=82=D1=80=D1=83=D0=BF=D0=B08
--=20
View on the web: http://192.168.1.101:5003/~nab2/trupa/8
--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d
Content-Type: application/pgp-signature
-----BEGIN PGP MESSAGE-----
wnUEARYIACcFAmUavj0JkKdioLsBS5scFiEE+ts/9LaoXcZuSmrHp2KguwFLmxwA
AIm9AP9KB4cZyiby7jiiRMRESDeJXrdb4kNqyA3D3nVOt14bKgD/UiDfUKE1MwiV
pOqj/S0wiJdChKW52zRAkwuQ7PtKkgI=
=AiY9
-----END PGP MESSAGE-----
--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d--
which is correct, and decodes correctly in neomutt.
Fixes: https://lists.sr.ht/~sircmpwn/sr.ht-discuss/%3C4uxbrlspm45s5i4bhhmqgmry374i22oqcxedtowda5zrzd7bpf2%405pyosds5owty%3E
email: remove content headers of passed-in message
The email has already been parsed according to the headers, but they are
still present. However, signing or encrypting the email will change the
content format, so remove any such headers before continuing.
email: handle error from Enqueue() in EnqueueStd()
email/worker: add more context to errors
For instance, failure to open the private PGP key would just fail
with an unhelpful "panic: open : no such file or directory" error.
email.EnqueueStd: Don't overwrite headers
Sometimes we need to specify the Message-Id, From, and Reply-To headers
(e.g. for todo.sr.ht ticket notifications). Don't overwrite these
headers if they are present.
email: handle failure to encrypt notifications
Currently, failure to encrypt the notification email - e.g. due to an
expired key - will make the entire request fail. Instead, fall back to
sending an unencrypted email and let the request succeed (unless that
fails also, which is unlikely).
Bugfix, mail config placed in wrong setting.
Replace x/crypto package by ProtonMail/go-crypto to support ed25519 OpenPGP keys
Add support for mail setups that don't support TLS or Auth
Remove %e formatting verbs
%e is not valid for formatting error values:
> %e scientific notation, e.g. -1.234456e+78
Instead, use %w when using fmt.Errorf (for error wrapping) and
%v when using log.Printf (%w is not valid in that context).
Configure server to manage mail queue
This also sets up the recovery function for webhooks, so we get emailed
when we panic during a webhook query.
Make worker logs less loud
Expand context for work queues
email: remove leftover debug code