doom-config/+mail.el

144 lines
5.7 KiB
EmacsLisp

;;; +mail.el -*- lexical-binding: t; -*-
(setq +mu4e-personal-addresses '("me@maxschlueter.com"
"maxsc@fsfe.org"))
(set-email-account! "mailbox.org"
'((mu4e-sent-folder . "/mailbox.org/Sent")
(mu4e-drafts-folder . "/mailbox.org/Drafts")
(mu4e-trash-folder . "/mailbox.org/Trash")
(mu4e-refile-folder . "/mailbox.org/Archive")
(smtpmail-smtp-user . "me@maxschlueter.com")
(mu4e-maildir-shortcuts
(:maildir "/mailbox.org/Inbox" :key ?i)
(:maildir "/mailbox.org/Sent" :key ?s)
(:maildir "/mailbox.org/Drafts" :key ?d)
(:maildir "/mailbox.org/Trash" :key ?t)
(:maildir "/mailbox.org/Archive" :key ?a))
(mu4e-compose-signature . nil))
t)
(after! mu4e
;; Recommended msmtp config from doom module documentation
(setq sendmail-program (executable-find "msmtp")
send-mail-function #'smtpmail-send-it
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from")
message-send-mail-function #'message-send-mail-with-sendmail)
;; fix https://github.com/hlissner/doom-emacs/issues/3294
(setq mu4e-attachment-dir "~/Downloads")
;; Sign sent email automatically
;; (add-hook 'message-send-hook 'mml-secure-message-sign-smime)
(setq mml-secure-openpgp-encrypt-to-self t)
;; Render buttons to verify&decrypt messages
(setq mm-decrypt-option 'always
mm-verify-option 'always
gnus-buttonized-mime-types '("multipart/encrypted" "multipart/signed"))
(defun max/mu4e-view-import-attachment-calendar (msg attnum)
(let* ((att (mu4e~view-get-attach msg attnum))
(index (plist-get att :index))
(docid (mu4e-message-field msg :docid))
(mtype (plist-get att :mime-type))
(fname (plist-get att :name))
(fpath (concat (mu4e~get-attachment-dir fname mtype) "/" fname)))
(if (string= "text/calendar" mtype)
(progn (mu4e~proc-extract 'save docid index mu4e-decryption-policy fpath)
(let ((org-caldav-inbox (max/org-caldav-get-inbox)))
(org-caldav-import-ics-to-org fpath)))
(mu4e-error "Invalid mime-type for a calendar event: `%s'" mtype))))
;; XXX
(add-to-list 'mu4e-view-attachment-actions
'("cImport in calendar" . max/mu4e-view-import-attachment-calendar) t)
(add-to-list 'mu4e-bookmarks
(make-mu4e-bookmark
:name "All Inboxes"
:query "maildir:/mailbox.org/Inbox"
:key ?i)))
;; Autoload this command so that the mbsync service can update the index
(autoload #'mu4e-update-index "mu4e" nil t)
(defun max/=mu4e ()
"Start email client and view all inboxes."
(interactive)
(require 'mu4e)
(+workspace-switch +mu4e-workspace-name t)
(mu4e~start (lambda () (mu4e-headers-search (mu4e-get-bookmark-query ?i)))))
(map! "<f2>" #'max/=mu4e)
(map! :after mu4e
:map mu4e-headers-mode-map
:vne "l" #'max/capture-msg-to-agenda)
(setq +org-capture-emails-file (expand-file-name "newgtd/actionable.org" org-directory))
;; Modified version of `+mu4e/capture-msg-to-agenda'.
(defun max/capture-msg-to-agenda (arg)
"Refile a message and add a entry in `+org-capture-emails-file'."
(interactive "p")
(let ((sec "^* Actions")
(msg (mu4e-message-at-point)))
(when msg
;; put the message in the agenda
(with-current-buffer (find-file-noselect
(expand-file-name +org-capture-emails-file org-directory))
(save-excursion
;; find header section
(goto-char (point-min))
(when (re-search-forward sec nil t)
(let (org-M-RET-may-split-line
(lev (org-outline-level))
(folded-p (invisible-p (point-at-eol)))
(from (plist-get msg :from)))
;; (when (consp (car from)) ; Occurs when using mu4e 1.8+.
;; (setq from (car from)))
(unless (keywordp (car from)) ; If using mu4e <= 1.6.
(setq from (list :name (or (caar from) (cdar from)))))
;; place the subheader
(when folded-p (show-branches)) ; unfold if necessary
(org-end-of-meta-data) ; skip property drawer
(org-insert-heading) ; insert a todo heading
(when (= (org-outline-level) lev) ; demote if necessary
(org-do-demote))
;; insert message and add deadline
(insert (concat "NEXT Reply to "
"[[mu4e:msgid:"
(plist-get msg :message-id) "]["
(truncate-string-to-width
(plist-get from :name) 25 nil nil t)
" - "
(truncate-string-to-width
(plist-get msg :subject) 40 nil nil t)
"]] :email:\n"))
(org-time-stamp-inactive '(16))
(org-update-parent-todo-statistics)
;; refold as necessary
(if folded-p
(progn
(org-up-heading-safe)
(hide-subtree))
(hide-entry))))))
;; refile the message and update
;; (cond ((eq major-mode 'mu4e-view-mode)
;; (mu4e-view-mark-for-refile))
;; ((eq major-mode 'mu4e-headers-mode)
;; (mu4e-headers-mark-for-refile)))
(message "Added \"%s\" to the agenda"
(truncate-string-to-width
(plist-get msg :subject) 40 nil nil t)))))
(use-package! jl-encrypt
:config
(setq mml-secure-insert-signature 'encrypted))
(after! mu4e-alert
(when IS-MAC
(mu4e-alert-set-default-style 'notifier)))