changeset 12446:92440abe8409

(sendmail-send-it): If user-full-name contains special characters, quote or escape them for the From: line.
author Richard M. Stallman <rms@gnu.org>
date Fri, 30 Jun 1995 17:31:31 +0000
parents 74e5ebf071fb
children 240de864f06c
files lisp/mail/sendmail.el
diffstat 1 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/sendmail.el	Fri Jun 30 10:38:19 1995 +0000
+++ b/lisp/mail/sendmail.el	Fri Jun 30 17:31:31 1995 +0000
@@ -519,9 +519,31 @@
 		(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