Function: mail-header-parse-address-lax
mail-header-parse-address-lax is a byte-compiled function defined in
mail-parse.el.gz.
Signature
(mail-header-parse-address-lax STRING)
Documentation
Parse STRING as a mail address.
Returns a mail/name pair.
This function uses heuristics to determine the email address and
the name in the string. If you have an RFC822(bis)
standards-compliant STRING, use mail-header-parse-address
instead.
Probably introduced at or before Emacs version 28.1.
Source Code
;; Defined in /usr/src/emacs/lisp/mail/mail-parse.el.gz
(defun mail-header-parse-address-lax (string)
"Parse STRING as a mail address.
Returns a mail/name pair.
This function uses heuristics to determine the email address and
the name in the string. If you have an RFC822(bis)
standards-compliant STRING, use `mail-header-parse-address'
instead."
(with-temp-buffer
(insert (string-clean-whitespace string))
;; Find the bit with the @ and guess that that's the mail.
(goto-char (point-max))
(when (search-backward "@" nil t)
(if (re-search-backward " " nil t)
(forward-char 1)
(goto-char (point-min)))
(let* ((start (point))
(mail (buffer-substring
start (or (re-search-forward " " nil t)
(goto-char (point-max))))))
(delete-region start (point))
;; We've now removed the email bit, so the rest of the stuff
;; has to be the name.
(cons (string-trim mail "[<]+" "[>]+")
(let ((name (string-trim (buffer-string)
"[ \t\n\r(]+" "[ \t\n\r)]+")))
(if (length= name 0)
nil
name)))))))