测试没什么问题了,除了一开始启动 Emacs 什么都没做的时候有个 invalid,马上就消失了。
我用的是 mbsync + mu4e + msmtp 的方案,折腾的时候主要时间都花在mbsync以及怎么收发gmail上面了,mu4e好像没花多少时间,东拼西凑就凑合能用了:
(use-package mu4e
:config
;;compose with org mode
(require 'org-mu4e)
(setq org-mu4e-convert-to-html t)
(setq mu4e-change-filenames-when-moving t)
(setq mail-user-agent 'mu4e-user-agent)
(setq mu4e-completing-read-function 'ivy-completing-read)
(setq mu4e-user-mail-address-list '("XXX" "XXXX"))
(setq mu4e-maildir "~/MAILDIR")
;; get mail
(setq mu4e-get-mail-command "proxychains4 mbsync GmailXXX; mbsync XXX")
(setq mu4e-update-interval 300)
(setq mu4e-headers-auto-update t)
(setq mu4e-hide-index-messages t
mu4e-display-update-status-in-modeline t)
;;headers
;;threading does not work well with Gmail
(setq mu4e-headers-include-related nil
mu4e-headers-show-threads nil)
(setq mu4e-headers-fields '((:human-date . 15)
(:flags . 6)
(:from-or-to . 24)
(:subject . nil)))
(setq mu4e-use-fancy-chars t)
;;pick up some symbols with consistent widths
(setq mu4e-headers-attach-mark '("a" . "📎")
mu4e-headers-seen-mark '("S" . "☑")
mu4e-headers-unread-mark '("u" . "☐")
mu4e-headers-visible-flags '(unread seen draft flagged new passed replied trashed attach encrypted signed))
;;message view
(add-hook 'mu4e-headers-mode-hook (lambda ()
(display-line-numbers-mode -1)))
(setq mu4e-view-show-addresses t)
(setq user-full-name "XXX")
;;contexts
(setq mu4e-contexts
`(,(make-mu4e-context
:name "XXX"
:enter-func (lambda () (mu4e-message "Entering XXX context"))
:leave-func (lambda () (mu4e-message "Leaving XXX context"))
:match-func (lambda (msg)
(when msg
(string-match-p "XXXXX" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "XXX")
(message-sendmail-extra-arguments . ("-a" "XXX"))
(mu4e-trash-folder . "XXX")
(mu4e-refile-folder . "XXX")
(mu4e-sent-folder . "XXX"))
)
,(make-mu4e-context
;;another context...
)
))
;; send
(setq message-send-mail-function 'message-send-mail-with-sendmail
sendmail-program "/usr/bin/msmtp")
(setq message-kill-buffer-on-exit t)
(setq mu4e-sent-messages-behavior 'delete)
)
我使用场景有限,够用就没使劲折腾,再加上还在过渡期,肯定有不少问题。