[neomutt-devel] [PATCH] send.c: Allow crypto operations in batch and mailx modes.

Alejandro Colomar alx at kernel.org
Fri Nov 10 01:41:41 CET 2023

This is useful for signing patches with git-send-email(1).  Here's a
working configuration for that:

In <~/.gitconfig>, add this section:

		sendmailcmd = mutt -H -

After this patch, all patches sent with git-send-mail(1) will be signed
(and even encrypted, if we have the public keys of all recipients and
have enabled encryption when possible).

This is breaking behavior, so it needs some more justification than just
the above.

This wasn't possible at all with mutt, and is a quite basic operation.
With current mutt(1), you'd need to do trickery with mailboxes to be
able to open patches with mutt in interactive mode and sign/encrypt
them.  One could say don't use git-send-email(1), but then you still
need to open mutt(1) interactively for sending signed mail.  It is
very useful to be able to send a long series of patches or any other
mail without interaction, and have it all signed.

The reason for not enabling this was for allowing running mutt(1) in
cron jobs, or other cases where the keyring can't be unlocked.  This
would still be possible after this patch, although it would need a
change in the configuration.  Users should have a different
configuration for such cron jobs that doesn't ask mutt(1) to use PGP.

Link: <https://github.com/neomutt/neomutt/issues/1471>
Link: <https://github.com/neomutt/neomutt/pull/1476>
Co-developed-by: Jenya Sovetkin <e.sovetkin at gmail.com>
Cc: <neomutt-devel at neomutt.org>
Signed-off-by: Alejandro Colomar <alx at kernel.org>


I've been trying this patch for a few days with real patches sent to
mailing lists, and it's been working great.  This same patch is sent
with this patch (and the suggested git-send-email(1) configuration).

I based this patch on work from Jenya in neomutt(1), which has similar
code, so the patch was easy to translate to mutt(1)'s code.

Here's how a log from git-send-email(1) looks like after this patch:

	$ git send-email patches/0001-CONTRIBUTING-Please-sign-your-emails-with-PGP.patch
	Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): y
	Looking for keys matching "alx at kernel.org"...
	OK. Log says:
	Sendmail: mutt -H - -i alx at kernel.org
	From: Alejandro Colomar <alx at kernel.org>
	To: alx at kernel.org
	Subject: [PATCH] CONTRIBUTING: Please sign your emails with PGP
	Date: Fri, 10 Nov 2023 01:16:46 +0100
	Message-ID: <20231110001648.4787-1-alx at kernel.org>
	X-Mailer: git-send-email 2.42.0
	MIME-Version: 1.0
	Content-Transfer-Encoding: 8bit

	Result: OK

I'm CCing neomutt(1), since I intend to send a similar patch to them.

Also, I only subscribed to mutt-dev@ recently, so this message may not
arrive to the list.  If so, please bounce it yourself there.


 send.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/send.c b/send.c
index 21ecf041..c98773fc 100644
--- a/send.c
+++ b/send.c
@@ -2248,13 +2248,11 @@ static int send_message_resume_first_edit (SEND_CONTEXT *sctx)
    * 2) pgp: header field was present during message editing with $edit_headers (sctx->msg->security != 0)
    * 3) we are resending a message
    * 4) we are recalling a postponed message (don't override the user's saved settings)
-   * 5) we are in mailx mode
-   * 6) we are in batch mode
    * This is done after allowing the user to edit the message so that security
    * settings can be configured with send2-hook and $edit_headers.
-  if (WithCrypto && (sctx->msg->security == 0) && !(sctx->flags & (SENDBATCH | SENDMAILX | SENDPOSTPONED | SENDRESEND)))
+  if (WithCrypto && (sctx->msg->security == 0) && !(sctx->flags & (SENDPOSTPONED | SENDRESEND)))
     if (

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://mailman.neomutt.org/pipermail/neomutt-devel-neomutt.org/attachments/20231110/654ba3f9/attachment.sig>

More information about the neomutt-devel mailing list