Calm Hill My Random Thoughts

NeoMutt with mbsync and msmtp

ကိုယ့်အလုပ်ထဲမှာ သုံးလေ့သုံးထရှိတဲ့ ကွန်ပျူတာတွေမှာ တချို့စက်တွေက Default အားဖြင့်က UI မပါတာလည်းရှိတယ်။ အလုပ်ကတော့ ကိုယ့်အတွက်က UI ရှိရှိမရှိရှိ လုပ်လို့ရပေမယ့် Email နဲ့ပတ်သက်ရင်တော့ နည်းနည်းတော့ အခက်အခဲရှိတယ်။ တခါတခါ Email ပြန်ဖို့အတွက်တို့ Email ထဲက ပြန်ရှာချင်တာတို့ဆို GUI ပါတဲ့ Desktop Environment တခုခုကို ပြန်ဝင်ရင်ဝင် တခြားစက်ကိုပြောင်းရင် ပြောင်းနဲ့ဆိုတော့ အလုပ်ပျက်တာနဲ့ Command Line Email Client တခု Setup ပြန်လုပ်ရတယ်။ ဟိုးအရင်ကတော့ Alpine နဲ့ Mutt သုံးခဲ့ဖူးတယ် အခုအချိန်မှာတော့ နှစ်ခုလုံးက Development လည်း ဆက်ပြီးတော့ မလုပ်သလောက် ဖြစ်နေပြီဆိုတော့ Maintenance ဆက်ပြီးလုပ်နေတဲ့ Mutt နဲ့ Compatible ဖြစ်တဲ့ NeoMutt ကိုသုံးဖို့ စဉ်းစားမိတယ်။

Email Client အနေနဲ့ NeoMutt ကို သုံးမယ်ဆိုပေမယ့် အဆင်မပြေရင် တခြားဟာပြန်ပြောင်းလို့ လွယ်အောင်ဆိုပြီး Mail Server ကနေ Mail တွေကို Local မှာ Sync လုပ်ဖို့နဲ့ Mail ပို့ဖို့အတွက်ကို Email Client ကိုမသုံးပဲ အပြင်ဘက်မှာပဲ တခြား Software တွေကိုသုံးလိုက်ပြီး Mail Client က Local ထဲမှာ Sync လုပ်ပြီးသား Mail တွေကို ဖတ်ဖို့အတွက်ပဲ သုံးပါတယ်။ Mail Server ကနေ Mail တွေကို IMAP နဲ့ Download လုပ်ဖို့အတွက် mbsync ကိုသုံးပြီးတော့ Email ပို့ဖို့အတွက် SMTP အတွက်က msmtp ကိုသုံးလိုက်တယ်။ IMAP နဲ့ SMTP အတွက်က တခြား Software တွေလည်းရှိပါတယ် ဘာပဲသုံးသုံး သိပ်ပြီးတော့မကွာပါဘူး။

ပထမဆုံးအဆင့်အနေနဲ့ Mail Server ပေါ်က Email တွေကို ကိုယ့်စက်ထဲကို mbsync ကိုသုံးပြီး Download လုပ်ပြီး Sync လုပ်ဖို့အတွက် mbsync ကို Install လုပ်ရမယ်။ ပြီးပြီဆိုရင်တော့ IMAP Settings တွေကို mbsync အတွက် config file ဖြစ်တဲ့ ~/.mbsyncrc မှာ လိုအပ်တာတွေကို Configure လုပ်ပေးဖို့လိုတယ်။ Configure လုပ်ပေးဖို့အတွက် အရင်ဆုံးအနေနဲ့ ကိုယ်သုံးတဲ့ Mail Server အပေါ်မူတည်ပြီး IMAP Settings တွေကို သိဖို့လိုပါတယ်။ ရုံးက Email ကတော့ G Suite ဖြစ်တဲ့အတွက် Gmail နဲ့တူပါလိမ့်မယ် Settings ထဲက Forwarding and POP/IMAP မှာ IMAP ကို Enable IMAP လုပ်ထားဖို့လိုမယ်။ 2-Step Verification ကို Enable လုပ်ထားရင် App password တခု Generate လုပ်ဖို့လိုလိမ့်မယ်။

.mbsyncrc

Create Both
Expunge Both
SyncState *

IMAPAccount work
Host imap.gmail.com
User [email protected]
# Pass your_secret_password
PassCmd "gpg -q --for-your-eyes-only -d ~/.mbsync/work.gpg"
SSLType IMAPS
AuthMechs LOGIN

IMAPStore work-remote
Account work

MaildirStore work-local
Path ~/Mail/work/
Inbox ~/Mail/work/inbox

Channel work-inbox
Master :work-remote:
Slave :work-local:
Patterns "INBOX"

Channel work-archive
Master :work-remote:"[Gmail]/All Mail"
Slave :work-local:archive

Channel work-sent
Master :work-remote:"[Gmail]/Sent Mail"
Slave :work-local:sent

Channel work-trash
Master :work-remote:"[Gmail]/Trash"
Slave :work-local:trash

Group work 
Channel work-inbox
Channel work-archive
Channel work-sent
Channel work-trash

အထက်မှာ နမူနာအဖြစ်နဲ့ ပြထားတဲ့ .mbsyncrc config မှာ Mail တွေကို ~/Mail/work/ ထဲကို Download လုပ်ပြီးထားတယ် ကိုယ့်ရဲ့ Mail ထဲမှာက Lable တွေ အများကြီးနဲ့ အတော်ရှုပ်တဲ့အတွက် နမူနာအဖြစ် INBOX, All Mail, Sent Mail, Trash ဆိုပြီးတော့ Channel ၄ ခုပဲပြထားတယ် လိုချင်သလောက် ထပ်ထည့်လို့ရသလို Account တခုထက်ပိုရင်လည်း ထပ်ထည့်လို့ရတယ်။ အရေးကြီးတာခုက IMAP Password ကို Pass your_secret_password လို့ တိုက်ရိုက်ထည့်ပြီး Configure လုပ်လို့ရပါတယ်။ .mbsyncrc ဟာ ကိုယ့်ရဲ့ Home အောက်မှာ ကိုယ့်တယောက်ပဲ ဖတ်လို့ရအောင် Permission ပေးထားလို့ရပေမယ့် Password ကို Plain Text မထားတာတော့ စိတ်အချရဆုံးပါ။ နမူနာထဲမှာတော့ gpg ကိုသုံးပြီးတော့ Encrypt လုပ်ထားတဲ့ Password သိမ်းထားတာကို သုံးထားတာကို တွေ့ပါလိမ့်မယ်။ Configure လုပ်ထားတာ ပြီးပြီဆိုရင်တော့ mbsync work ဆိုပြီး Mail တွေကို Sync လုပ်ရင် ~/Mail/work/ အောက်မှာ Mail Server ထဲက Email တွေကို တွေ့ပါလိမ့်မယ်။ Config ထဲမှာ Multiple Account နဲ့ လုပ်ထားရင်တော့ mbsync -a ဆိုရင် Account အားလုံးကို Sync လုပ်လို့ရပါတယ်။

Mail တွေကို Local ထဲကို Sync လုပ်ပြီးရင်တော့ NeoMutt နဲ့ အနည်းဆုံးတော့ ဖတ်လို့ရဖို့အတွက် Configure လုပ်လို့ရပါပြီ။ NeoMutt ဟာ Mutt ရဲ့ config တွေနဲ့လည်း သုံးလို့ရတဲ့အတွက် ~.mutt/muttrc မှာလည်း Configure လုပ်လို့ရသလို ~/.neomutt မှာလည်းရတယ်။ နမူနာအဖြစ် အောက်မှာပြထားတဲ့ config ထဲမှာဆိုရင် Mail Box တွေကို Sync လုပ်ထားတဲ့ ~/.Mail/work ထဲက သက်ဆိုင်ရာ Directory တွေကို Map လုပ်ထားတယ် Email တွေကို Threads နဲ့ Date ကိုသုံးပြီးတော့ ကြီးစဉ်ငယ်လိုက် စီထားသလို NeoMutt ထဲကနေ Email တွေကို Sync လုပ်ဖို့အတွက် Ctrl+n ဆိုရင် mbsync -a ကို Run ခိုင်းထားတယ်။ ဒီလောက်ဆိုရင် NeoMutt ထဲမှာ Email တွေကို ဖတ်လို့ရနေပါပြီ။

.mutt/muttrc

# Mail Boxes
set folder = "~/Mail/"
set spoolfile = +work/inbox
set mbox = +work/archive
set trash = +work/trash
set record = +work/sent
mailboxes +work \
          +work/inbox \
          +work/archive \
          +work/sent \
          +work/trash \

# Sorting Order
set sort = 'threads'
set sort_aux = 'reverse-date'

# Ctrl-n to sync Email with mbsync
macro index \Cn "<shell-escape>mbsync -a<enter>"

ဖတ်လို့ရပြီဆိုပေမယ့် ထပ်ပြီးတော့ လုပ်စရာလေးတွေ ရှိပါသေးတယ် HTML Email ဆိုတာက အခုခေတ်မှာရှောင်ရတာ အတော်ခက်ပါတယ်။ Email တချို့မှာက HTML Support မလုပ်တဲ့ Client တွေအတွက်ဆိုပြီး ဖတ်လို့ရအောင် ၂ မျိုးလောက် ထည့်ပေးတတ်ပေမယ့် တချို့ကတော့ HTML Only နဲ့ ပို့လိုက်တာလည်းရှိတယ်။ HTML တွေကို Text အနေနဲ့ ဖတ်လို့ရအောင် w3m လို Command Line Browser တခုခုနဲ့ Render လုပ်ဖို့ Configure လုပ်ပေးဖို့လိုတယ်။ Mail ထဲမှာပါတဲ့ Content Type အပေါ်မူတည်ပြီး ဘယ်လိုဖတ်ပါဆိုတာမျိုးက ~/.mailcap config မှာပြောပေးဖို့လိုတယ်။ နမူနာအဖြစ် HTML တွေကို w3m နဲ့ Render လုပ်ဖို့အတွက် နမူနာအဖြစ် အောက်မှာပြထားပါတယ် အကယ်၍သာ တခြား Contents တွေဖြစ်တဲ့ Image တွေတို့ PDF တွေတို့ကို ဖွင့်ဖို့အတွက်ဆိုလည်း လိုအပ်သလို .mailcap config မှာထပ်ထည့်လို့ရတယ်။

.mailcap

text/html; w3m -I %{charset} -T text/html; copiousoutput;

အခုလက်ရှိပြီးသလောက်မှာ Email ကို ကောင်းကောင်းဖတ်လို့ ရနေပြီဆိုတော့ Email ပို့ဖို့အတွက် SMTP အတွက် msmtp ကို Configure လုပ်ဖို့ရှိတော့တယ်။ နမူနာအဖြစ်နဲ့ ~/.msmtprc ကိုအောက်မှာပြထားပါတယ် IMAP တုံးကလိုပဲ Password ကို Plain နဲ့မထားပဲ Encrypt လုပ်ထားတာပဲသုံးပါတယ် Plain Text နဲ့ထားချင်ရင်တော့ passwordeval အစား password ကိုသုံးရင်ရပါလိမ့်မယ်။ SMTP သုံးလို့ရပြီဆိုရင် muttrc မှာလည်း Mail ပို့ဖို့အတွက် ဘယ်သူပို့တယ်တို့ msmtp ရဲ့ command စသည်ဖြင့် နည်းနည်းထပ်ထည့်ပေးရမယ် အဲဒါဆိုရင်တော့ Mail လည်းပို့လို့ ရသွားပါလိမ့်မယ်။

.msmtprc

account work
host smtp.gmail.com
port 587
protocol smtp
auth on
from [email protected]
user [email protected]
passwordeval "gpg -q --for-your-eyes-only -d ~/.mbsync/work.gpg"
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
account default : work

.mutt/muttrc

# User Accounts
set from = "[email protected]"
set realname = "My Name"
set sendmail = "msmtp -a work"
set sendmail_wait = 0

Mutt က သာမန်လူတွေအတွက် သိပ်ပြီးတော့သုံးရလွယ်တဲ့ Software တော့မဟုတ်ပါဘူး အခုပြထားတဲ့ Config တွေကလည်း သုံးလို့ရဖို့လောက်ပဲ ပြထားတာပါ။ ဆက်ပြီးတော့ လုပ်ချင်တယ်ဆိုရင် Email Sync လုပ်တာကို Manual မလုပ်ပဲ Automate ဘယ်လိုလုပ်မလဲ Multiple Account တွေ အဆင်ပြေအောင် ဘယ်လိုလုပ်ကြမလဲ ဆက်လုပ်ရမှာတွေ လုပ်ရင်လုပ်နိုင်သလောက် ကျန်ပါသေးတယ် အသေးစိတ်အတွက် သိချင်ရင်တော့ သက်ဆိုင်ရာ Document တွေမှာသာ သွားပြီးဖတ်ကြပါ။