Sèkun blog


Mettre en place mu4e dans emacs

2022-12-19 dev | tags : emacs mail mu4e

Pour mettre en place mu4e avec emacs sous archlinux, il faut installer mu-git et isync. Les fichiers seront protégés par une clé gpg, qu'il faut donc créer.

La procédure est la suivante:

  1. Créer le fichier ~/.authinfo.gpg, utilisé par sendmail.el pour l'envoie d'email. On l'utilisera pour récupérer les mots de passe des serveurs IMAP avec mbsync, pour ne les stocker qu'à un seul endroit.
  2. Configurer mbsync via le fichier ~/.mbsync.rc afin de récupérer les e-mails depuis les serveurs distants en local.
  3. Indexer les e-mails avec mu.
  4. Mettre en place mu4e.

Ouvrez le fichier ~/.auhthinfo.gpg avec emacs, puis sauvegardez-le. Emacs propose de sélectionner des destinataires pour le chiffrement. Selon le guide sur emacswiki, il est préférable d'en choisir au moins un, sinon on devra rentrer notre mot de passe à chaque fois que l'on sauvegarde le fichier.

Pour l'exemple prenons un service IMAP. On aura besoin du serveur IMAP: imap.example.com, ainsi que du serveur smtp pour l'envoi des emails: smtp.example.com.

Chaque ligne du fichier ~/.authinfo.gpg correspondra aux identifiants utilisés pour envoyer un e-mail via smtpmail. Une ligne a la forme suivante:

machine mail.example.com YOUR_EMAIL email port 465 password YOUR_PASSWORD

On va configurer mbsync via le fichier ~/.mbsyncrc, remplacez ACCOUNT_NAME par un nom de compte de votre choix, et YOUR_EMAIL par votre adresse email complète.

IMAPAccount ACCOUNT_NAME
Host mail.example.com
User YOUR_EMAIL
PassCmd "/usr/bin/gpg2 -q --for-your-eyes-only --no-tty -d ~/.authinfo.gpg | grep YOUR_EMAIL | sed 's/.*password //'"
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore ACCOUNT_NAME-remote
Account ACCOUNT_NAME

MaildirStore ACCOUNT_NAME-local
Path ~/Mail/ACCOUNT_NAME/
Inbox ~/Mail/ACCOUNT_NAME/INBOX
SubFolders Verbatim

Channel ACCOUNT_NAME
Far :ACCOUNT_NAME-remote:
Near :ACCOUNT_NAME-local:
Patterns *
Create Both
Expunge Both
SyncState *

La commande spécifiée dans PassCmd récupère le mot de passe du compte SMTP stocké dans ~/.authinfo.

Il faut créer le dossier dans ~/Mail/ avant de lancer mbsync la première fois:

mkdir -p ~/Mail/ACCOUNT_NAME
mbsync ACCOUNT_NAME

Si la commande n'échoue pas, elle renvoie un résultat comme suit:

$ mbsync ACCOUNT_NAME
C: 1/1  B: 10/10  F: +0/0 *0/0 #0/0  N: +0/0 *0/0 #0/0

Un fois fait, on peut indexer nos e-mails avec la commande mu.

mu index -m ~/Mail --my-address YOUR_EMAIL --my-address YOUR_OTHER_EMAIL

Il reste à configurer mu4e, le frontend à mu. La configuration suivante utilise use-package.

(use-package mu4e
  :load-path "/usr/share/emacs/site-lisp/mu4e/"
  :init
  (use-package smtpmail)
  :config
  (setq mu4e-update-interval (* 5 60))
  (setq mu4e-get-mail-command "mbsync -a")
  (setq mail-user-agent 'mu4e-user-agent)
  (setq message-send-mail-function 'smtpmail-send-it)
  (setq mu4e-sent-messages-behavior 'sent)
  (setq mu4e-change-filenames-when-moving t)
  (setq mu4e-context-policy 'pick-first)

  (setq mu4e-contexts
        (list
         (make-mu4e-context
          :name "ACCOUNT_NAME"
          :vars '(
                  (mu4e-trash-folder . "/ACCOUNT_NAME/Trash")
                  (mu4e-refile-folder . "/ACCOUNT_NAME/Archives")
                  (mu4e-sent-folder . "/ACCOUNT_NAME/Sent")
                  (mu4e-drafts-folder . "/ACCOUNT_NAME/Drafts")
                  (user-mail-address . "YOUR_EMAIL")
                  (user-full-name . "Firstname Lastname")
                  (smtpmail-default-smtp-server . "smtp.example.com")
                  (smtpmail-smtp-server . "smtp.example.com")
                  (smtpmail-smtp-user . "YOUR_EMAIL")
                  (smtpmail-stream-type . ssl)
                  (smtpmail-smtp-service . 465)
                  ))
         ))
  ))

Dans la configuration, (setq mu4e-sent-messages-behavior 'sent) doit être mis à 'delete dans le cas du serveur IMAP de Gmail, car ce dernier s'occupe de copier les messages dans le dossier Sent.

La ligne (setq mu4e-change-filenames-when-moving t) est nécessaire lorsqu'on utilise mbsync, voir C.2.6 IMAP-synchronization and file-name changes.

Article publié le 19 décembre 2022.