Subject: bug#53412: wrappin text lines is not enough, headers shoould be split too

From: Francesco Potortì <[email-masked]>
Date: Mon, 07 Mar 2022 14:11:14 +0100

I just discovered that checking overlong text lines is not enough.

Apparently calling mml-to-mime does not wrap overlong headers.

If there is an overlong header, other headers which are utf-8 escaped are not sent correctly, and the recipient sees something like this:

Subject: test =?utf-8?Q?=C3=A0?= b c
 =?utf-8?Q?=C3=AC?=

Sending an identical email with long headers split into several lines makes the problem disappear.

RFC 5322 mandates mail line lengths less than 998 (including CRLF), and this is apparently not enforced by mml-to-mime for headers, I suppose it should.

My current workaround is:

(setq overlength 500)	; should by 998 including CRLF
(setq overlong-header-message "Overlong header at point: abort sending email.")
(add-hook 'mail-send-hook
	  ;; should become useless with Emacs 29
	  (lambda ()
	    (and (mm-long-lines-p overlength)
		 (mml-to-mime))	 ; break overlong text lines
	    ;; Now check that no overlong headers exist
	    (save-restriction
	      (message-narrow-to-headers)
	      (goto-char (point-min))
	      (and (search-forward-regexp (make-string overlength ?.) nil t)
		   (error overlong-header-message)))))

	  90)