;;; +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! "" #'max/=mu4e) (add-to-list 'org-capture-templates `("m" "email" entry (file+headline ,(expand-file-name "newgtd/actionable.org" org-directory) "Actions") "* NEXT Reply to [[mu4e:msgid:%:message-id][%:fromname - %:subject]] :email:\n%U\n")) (defun max/mu4e-org-capture () "Invoke the email capture template for msg at point" (interactive) (org-capture nil "m")) (map! :after mu4e :map mu4e-headers-mode-map :vne "l" #'max/mu4e-org-capture) (use-package! jl-encrypt :config (setq mml-secure-insert-signature 'encrypted)) (after! mu4e-alert (when IS-MAC (mu4e-alert-set-default-style 'notifier)))