mu4e: Factor address fetching into `message-fetch-addresses'
parent
ca41fc44db
commit
254e9f7095
|
@ -143,21 +143,43 @@ This function is suitable for `mu4e-compose-mode-hook'."
|
|||
(mml-secure-message-sign-pgpmime)))))
|
||||
(add-hook 'mu4e-compose-mode-hook 'ambrevar/mu4e-compose-maybe-signed-and-crypted)
|
||||
|
||||
(defun ambrevar/message-fetch-addresses ()
|
||||
"Return a list of (NAME EMAIL) from the message header.
|
||||
The \"From\", \"To\", \"Cc\" and \"Bcc\" fields are looked up.
|
||||
Addresses in `mu4e-user-mail-address-list' are filtered out.
|
||||
Duplicates are removed."
|
||||
(require 'cl)
|
||||
(cl-delete-duplicates
|
||||
(seq-remove
|
||||
(lambda (contact) (member (cadr contact) mu4e-user-mail-address-list))
|
||||
(apply 'append
|
||||
(if (eq major-mode 'mu4e-compose-mode)
|
||||
(save-restriction
|
||||
(message-narrow-to-headers)
|
||||
(mapcar
|
||||
(lambda (addr) (mail-extract-address-components (message-fetch-field addr) t))
|
||||
(seq-filter 'message-fetch-field
|
||||
'("From" "To" "Cc" "Bcc"))))
|
||||
(unless (buffer-live-p (mu4e-get-headers-buffer))
|
||||
(mu4e-error "no headers buffer connected"))
|
||||
(delq nil
|
||||
(mapcar (lambda (field)
|
||||
;; `mu4e-message-field' returns a list of (NAME . EMAIL).
|
||||
(mapcar (lambda (addr) (list (car addr) (cdr addr)))
|
||||
(mu4e-message-field
|
||||
(with-current-buffer (mu4e-get-headers-buffer)
|
||||
;; When loading messages, point might
|
||||
;; not be over a message yet.
|
||||
(mu4e-message-at-point))
|
||||
field)))
|
||||
'(:from :to :cc :bcc))))))))
|
||||
|
||||
(defun ambrevar/message-send-maybe-crypted ()
|
||||
"Crypt message if all recipients have a trusted key.
|
||||
This will prompt the user if only some recipients have a suitable public key.
|
||||
Suitable for `message-send-hook'."
|
||||
(let (recipients valid-addresses untrusted-recipients)
|
||||
(setq recipients
|
||||
(save-restriction
|
||||
(message-narrow-to-headers)
|
||||
(apply 'append
|
||||
(mapcar
|
||||
(lambda (header)
|
||||
(mapcar 'cadr (mail-extract-address-components
|
||||
(message-fetch-field header) t)))
|
||||
(seq-filter 'message-fetch-field
|
||||
'("To" "Cc" "Bcc"))))))
|
||||
(let ((recipients (mapcar 'cadr (ambrevar/message-fetch-addresses)))
|
||||
valid-addresses untrusted-recipients)
|
||||
(dolist (key (epg-list-keys (epg-make-context epa-protocol)))
|
||||
(dolist (user-id (epg-key-user-id-list key))
|
||||
(when (memq (epg-user-id-validity user-id) '(marginal full ultimate))
|
||||
|
@ -288,15 +310,8 @@ This function could be useful in `mu4e-compose-mode-hook'."
|
|||
"Return a list of (NAME . ADDRESS).
|
||||
If point has an `email' property, move it to the front of the list.
|
||||
Addresses in `mu4e-user-mail-address-list' are skipped."
|
||||
(let (result
|
||||
(let ((result (ambrevar/message-fetch-addresses))
|
||||
(message org-store-link-plist))
|
||||
(setq result (seq-remove
|
||||
(lambda (contact) (member (cadr contact) mu4e-user-mail-address-list))
|
||||
(apply 'append
|
||||
(mapcar (lambda (addr) (mail-extract-address-components addr t))
|
||||
(delq nil
|
||||
(mapcar (lambda (field) (mu4e-message-field message field))
|
||||
'(:from :to :cc :bcc)))))))
|
||||
;; Move contact at point to front.
|
||||
(let ((email-at-point (get-text-property (point) 'email))
|
||||
(contacts result))
|
||||
|
|
Loading…
Reference in New Issue