From 7f1d5de23df6dd4dd1f3add81c0cb3c82dddc673 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 30 Jun 1995 17:31:31 +0000 Subject: [PATCH] (sendmail-send-it): If user-full-name contains special characters, quote or escape them for the From: line. --- lisp/mail/sendmail.el | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 15a7096814c..f30581cbb2a 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -519,9 +519,31 @@ the user from the mailer." (let* ((login (user-login-name)) (fullname (user-full-name))) (cond ((eq mail-from-style 'angles) - (insert "From: " fullname " <" login ">\n")) + (insert "From: " fullname) + (let ((fullname-start (+ (point-min) 6)) + (fullname-end (point-marker))) + (goto-char fullname-start) + ;; Look for a character that cannot appear unquoted + ;; according to RFC 822. + (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" + fullname-end 1) + (progn + ;; Quote fullname, escaping specials. + (goto-char fullname-start) + (insert "\"") + (while (re-search-forward "[\"\\]" + fullname-end 1) + (replace-match "\\\\\\&" t)) + (insert "\"")))) + (insert " <" login ">\n")) ((eq mail-from-style 'parens) - (insert "From: " login " (" fullname ")\n")) + (insert "From: " login " (" fullname) + (let ((fullname-end (point-marker))) + (backward-char (length fullname)) + ;; RFC 822 says ()\ must be escaped in comments. + (while (re-search-forward "[()\\]" fullname-end 1) + (replace-match "\\\\\\&" t))) + (insert ")\n")) ((null mail-from-style) (insert "From: " login "\n"))))) ;; Insert an extra newline if we need it to work around -- 2.39.2