Function: rmail-search-mime-message
rmail-search-mime-message is a byte-compiled function defined in
rmailmm.el.gz.
Signature
(rmail-search-mime-message MSG REGEXP)
Documentation
Function to set in rmail-search-mime-message-function (which see).
Source Code
;; Defined in /usr/src/emacs/lisp/mail/rmailmm.el.gz
(defun rmail-search-mime-message (msg regexp)
"Function to set in `rmail-search-mime-message-function' (which see)."
(save-restriction
(narrow-to-region (rmail-msgbeg msg) (rmail-msgend msg))
(let* ((rmail-mime-searching t) ; mark inside search
(rmail-mime-mbox-buffer (current-buffer))
(rmail-mime-view-buffer rmail-view-buffer)
(header-end (save-excursion
(re-search-forward "^$" nil 'move) (point)))
;; (body-end (point-max))
(entity (rmail-mime-parse)))
(or
;; At first, just search the headers.
(with-temp-buffer
(insert-buffer-substring rmail-mime-mbox-buffer nil header-end)
(rfc2047-decode-region (point-min) (point))
(goto-char (point-min))
(re-search-forward regexp nil t))
;; Next, search the body.
(if (and entity
;; RMS: I am not sure why, but sometimes this is a string.
(not (stringp entity))
(let* ((content-type (rmail-mime-entity-type entity))
(charset (cdr (assq 'charset (cdr content-type)))))
(or (not (string-match "text/.*" (car content-type)))
(and charset
(not (string= (downcase charset) "us-ascii"))))))
;; Search the decoded MIME message.
(with-temp-buffer
(rmail-mime-insert entity)
(goto-char (point-min))
(re-search-forward regexp nil t))
;; Search the body without decoding.
(goto-char header-end)
(re-search-forward regexp nil t))))))