Hvordan jeg fik Mu4e sat op til emails i Emacs
Jeg har drømt om at bruge Emacs som mit mailprogram i lang tid, men det var først for nyligt det lykkedes for mig at få det til. Der vrimler ikke lige frem med guides til opsætning med protonmails bridge-klient.
Heldigvis fandt jeg frem til et par guides, som har hjulpet mig enormt.
Dels https://doubleloop.net/2019/09/06/emacs-mu4e-mbsync-and-protonmail/ og dels https://www.tomica.net/blog/2020/12/sending-mail-using-multiple-mu4e-contexts-in-emacs/
Som jeg søgte mod efter at have været en tur forbi https://systemcrafters.net/emacs-mail/managing-multiple-accounts/ og rode med det hele.
Tre komponenter
I første omgang var det, der tog mig aller mest tid for mig, at forstå (DOH!), at når man bruger Emacs som sin mailklient, skal man bruge tre komponenter:
-
Noget der kan modtage og sortere posten så mu4e kan finde den (her bruger jeg imap via mbsync)
-
Noget der kan /sende/ posten afsted igen, hvis man gerne vil have den del med (SMTP), så mu4e kan skibe beskederne videre.
-
mu4e til at administrere begge disse funktioner fra inde i emacs.
IMAP opsætning med mbsync
For nu at tage tingene i den rette orden, skulle jeg først installere mbsync, hvorefter jeg kunne oprette en isynrc-fil i min .config/ mappe og tilføje disse specs:
1IMAPAccount protonmail
2Host 127.0.0.1
3Port 1143
4User [DIN E-MAIL @protonmail HER]
5Pass [DIN KODE FRA BROEN VIA KRYPTERET FIL HERTIL]
6TLSTYPE STARTTLS
7CertificateFile ~/.cert/protonmail.crt
8
9IMAPStore remote
10Account protonmail
11
12# Man kan selv bestemme hvad maildir skal være, min er .Maildir
13MaildirStore local
14Subfolders Verbatim
15Path ~/.Maildir/ProtonMails/
16Inbox ~/.Maildir/ProtonMails/Inbox/
17
18Channel inbox
19Far :remote:
20Near :local:
21Patterns * [ProtonMails]* "[ProtonMails]/Sent Mail" "[ProtonMails]Starred" "[ProtonMails]/Trash"
22Create Near
23#Expunge Both
24SyncState *
For at bruge en sikker mbsync-forbindelse skal du lægge det certifikat, som du får genereret af openssl s_client -starttls imap -connect 127.0.0.1:1143 -showcerts i ~/.cert/protonmail.crt og så henvise til det i din isyncrc (som jeg har gjort herover):
1TLSType STARTTLS
2TLSVersions TLSv1.2
3CertificateFile ~/.cert/protonmail.crt
Du skal bruge linjerne mellem (både første og sidste ‘—-’ inklusiv: —–BEGIN CERTIFICATE—– og —–END CERTIFICATE—–
Så kunne jeg langt om længe åbne en terminal og køre:
1mbsync protonmail
og
mu index
For at få mailsynkroniseringen sat op og indexeret på en måde som mu4e kan bruge.
MSMTP til at sende med
Da jeg begyndte at drømme om at kunne sende fra andre adresser end den givne *@protonmail, f.eks. min mail fra fsfe, fandt jeg ud af, at msmtp var nødvendig i min smtp opsætning. Det var heldigvis ret nemt at få det sat op.
Det krævede ikke andet end oprettelse og konfiguration af /usr/bin/msmtp via oprettelse af en .msmtprc-fil som jeg udfyldte jf. en vejledning fra archwiki https://wiki.archlinux.org/title/Msmtp (Jeg bruger debian btw):
1~/.msmtprc
2
3# Set default values for all following accounts.
4defaults
5auth on
6tls on
7tls_trust_file /etc/ssl/certs/ca-certificates.crt
8logfile ~/.msmtp.log
9
10# Gmail (i mit tilfælde protonmail)
11account gmail
12host smtp.gmail.com
13port 465
14tls_starttls off
15from username@gmail.com
16user username
17password plain-text-password
18
19# A freemail service (i mit tilfælde en anden)
20account freemail
21host smtp.freemail.example
22from joe_smith@freemail.example
23...
24
25# Accounts can inherit info from another account
26account postmasterfreemail : freemail
27from postmaster*@freemail.example
28
29# Set a default account
30account default: gmail (igen for mig en anden værdi her)
og så kunne jeg tilføje dette til min .init fil i Emacs:
1;; send med MSMTP
2(setq sendmail-program "/usr/bin/msmtp"
3 message-sendmail-f-is-evil t
4 message-sendmail-extra-arguments '("--read-envelope-from")
5 send-mail-function 'smtpmail-send-it
6 message-send-mail-function 'message-send-mail-with-sendmail)
mu4e opsætningen i .init eller .emacs
Den del tog mig også lidt tid, for jeg skulle først have lokaliseret hvor h*?%&! min mu4e var havnet efter installationen.
Jeg spurgte lidt rundt på nettet efter det, og bl.a. i matrix-gruppen #Emacs:matrix.org hvor det venlige fællesskab der er rundt om den fantastiske editor endnu en gang havde min ryg. - Fik jeg nævnt at jeg ELSKER emacs?!
I første omgang førte det til en basisopsætning, jeg var OK tilfreds med:
1 ;;========= E-POST MED mu4e ================
2;; setting mu4e to executable path & require
3(add-to-list 'load-path "/usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14")
4(setq mu4e-mu-binary "/usr/bin/mu")
5(require 'mu4e)
6
7;; SMTP from https://doubleloop.net/2019/09/06/emacs-mu4e-mbsync-and-protonmail/
8(setq mu4e-maildir "~/mail"
9 mu4e-attachment-dir "~/downloads"
10 mu4e-sent-folder "/Sent"
11 mu4e-drafts-folder "/Drafts"
12 mu4e-trash-folder "/Trash"
13 mu4e-refile-folder "/Archive")
14
15(setq user-mail-address "DIN_EMAIL_ADRESSE"
16 user-full-name "DIT_FULDE_NAVN")
17
18;; Get mail
19(setq mu4e-get-mail-command "mbsync protonmail"
20 mu4e-change-filenames-when-moving t ; needed for mbsync
21 mu4e-update-interval 120) ; update every 2 minutes
22
23;; Send mail with SMTP
24(setq message-send-mail-function 'smtpmail-send-it
25 smtpmail-auth-credentials "~/.authinfo.gpg"
26 smtpmail-smtp-server "127.0.0.1"
27 smtpmail-smtp-service 1025)
Flere konti
Men så var det jeg faldt i kaninhullet. For hvad nu hvis man kunne have flere konti. Derfor ser mail-sektionen af min .init nu ud som følger:
1;; Opsætning af mu4e til kontekster med .Mail som hoved-dir:
2(setq mu4e-change-filenames-when-moving t) ;; nødvendig for at undgå mbsync issues
3;; genopfriskelses-interval
4(setq mu4e-update-interval 120)
5(setq mu4e-get-mail-command "mbsync -a")
6(setq mu4e-maildir "~/.Maildir")
7
8;; Kontekster
9(setq mu4e-contexts
10 (list
11 ;;ProtonMail-konto
12 (make-mu4e-context
13 :name "protonmail-classic"
14 :match-func
15 (lambda (msg)
16 (when msg
17 (string-prefix-p "/ProtonMails" (mu4e-message-field msg :maildir))))
18 :vars '((user-mail-address . "fritjofarnfred@protonmail.com")
19 (user-full-name . "Øjvind Fritjof Arnfred")
20 (user-full-name . "Øjvind Fritjof Arnfred")
21 (mu4e-compose-signature . (concat
22 "Venlig hilsenKind regards\n"
23 "Øjvind Fritjof Arnfred\n"
24 "+45 29 65 28 52\n"
25 "https://www.fritjofarnfred.dk"))
26 (mu4e-drafts-folder . "/ProtonMails/[ProtonMails]/Drafts")
27 (mu4e-sent-folder . "/ProtonMails/[ProtonMails]/Sent Mail")
28 (mu4e-trash-folder . "/ProtonMails/[ProtonMails]/Trash")))
29;; Personal account
30 (make-mu4e-context
31 :name "FSFE-konto"
32 :match-func
33 (lambda (msg)
34 (when msg
35 (string-prefix-p "/fsfeMails" (mu4e-message-field msg :maildir))))
36 :vars '((user-mail-address . "slartibartfast@fsfe.org")
37 (user-full-name . "Øjvind Fritjof Arnfred")
38 (mu4e-compose-signature . (concat
39 "Kind regards\n"
40 "Øjvind Fritjof Arnfred\n"
41 "+45 29 65 28 52\n"
42 "https://www.fritjofarnfred.dk"))
43 (mu4e-drafts-folder . "/ProtonMails/[ProtonMails]/Drafts")
44 (mu4e-sent-folder . "/ProtonMails/[ProtonMails]/Sent Mail")
45 (mu4e-refile-folder . "/ProtonMails/[ProtonMails]/All Mail")
46 (mu4e-trash-folder . "/ProtonMails/[ProtonMails]/Trash")))))
47
48(setq mu4e-maildir-shortcuts
49 '(("/ProtonMails/Inbox" . ?i)
50 ("/ProtonMails/[ProtonMails]/Sent Mail" . ?s)
51 ("/ProtonMails/[ProtonMails]/Trash" . ?t)
52 ("/ProtonMails/[ProtonMails]/Drafts" . ?d)
53 ("/ProtonMails/[ProtonMails]/All Mail" . ?a)))
Desværre bøvler jeg stadig lidt med den sidste hurdle, som er at kunne /besvare/ mails fra min @fsfe-konto. Jeg tilføjer nok et opslag, når jeg får knækket dèn nød.