我的個人電子郵件系統設定:notmuch、mbsync、Postfix 和 dovecot
我使用個人電子郵件系統已經相當長的時間了,但是一直沒有記錄過文件。最近我換了我的膝上型電腦(職業變更導致的變動),我在試圖重新建立本地郵件系統時迷茫了。所以這篇文章是一個給自己看的文件,這樣我不用費勁就能再次搭建出來。
伺服器端
我執行自己的郵件伺服器,並使用 Postfix 作為 SMTP 伺服器,用 Dovecot 實現 IMAP。我不打算詳細介紹如何配置這些設定,因為我的設定主要是透過使用 Jonas 為 Redpill 基礎架構建立的指令碼完成的。什麼是 Redpill?(用 Jonas 自己的話說):
<jonas> Redpill 是一個概念:一種設定 Debian hosts 去跨組織協作的方式
<jonas> 我發展了這個概念,並將其首次用於 Redpill 網中網:redpill.dk,其中涉及到了我自己的網路(jones.dk),我的主要客戶的網路(homebase.dk),一個包括 Skolelinux Germany(free-owl.de)的在德國的網路,和 Vasudev 的網路(copyninja.info)
除此之外, 我還有一個 dovecot sieve 過濾,根據郵件的來源,對郵件進行高階分類,將其放到各種資料夾中。所有的規則都存在於每個有郵件地址的賬戶下的 ~/dovecot.sieve
檔案中。
再次,我不會詳細介紹如何設定這些東西,因為這不是我這個帖子的目標。
在我的膝上型電腦上
在我的膝上型電腦上,我已經按照 4 個部分設定
- 郵件同步:使用
mbsync
命令完成 - 分類:使用 notmuch 完成
- 閱讀:使用 notmuch-emacs 完成
- 郵件傳送:使用作為中繼伺服器和 SMTP 客戶端執行的 Postfix 完成。
郵件同步
郵件同步是使用 mbsync
工具完成的, 我以前是 OfflineIMAP 的使用者,最近切換到 mbsync
,因為我覺得它比 OfflineIMAP 的配置更輕量、更簡單。該命令是由 isync 包提供的。
配置檔案是 ~/.mbsyncrc
。下面是我的例子與一些個人設定。
IMAPAccount copyninja
Host imap.copyninja.info
User vasudev
PassCmd "gpg -q --for-your-eyes-only --no-tty --exit-on-status-write-error --batch --passphrase-file ~/path/to/passphrase.txt -d ~/path/to/mailpass.gpg"
SSLType IMAPS
SSLVersion TLSv1.2
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPAccount gmail-kamathvasudev
Host imap.gmail.com
User kamathvasudev@gmail.com
PassCmd "gpg -q --for-your-eyes-only --no-tty --exit-on-status-write-error --batch --passphrase-file ~/path/to/passphrase.txt -d ~/path/to/mailpass.gpg"
SSLType IMAPS
SSLVersion TLSv1.2
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore copyninja-remote
Account copyninja
IMAPStore gmail-kamathvasudev-remote
Account gmail-kamathvasudev
MaildirStore copyninja-local
Path ~/Mail/vasudev-copyninja.info/
Inbox ~/Mail/vasudev-copyninja.info/INBOX
MaildirStore gmail-kamathvasudev-local
Path ~/Mail/Gmail-1/
Inbox ~/Mail/Gmail-1/INBOX
Channel copyninja
Master :copyninja-remote:
Slave :copyninja-local:
Patterns *
Create Both
SyncState *
Sync All
Channel gmail-kamathvasudev
Master :gmail-kamathvasudev-remote:
Slave :gmail-kamathvasudev-local:
# Exclude everything under the internal [Gmail] folder, except the interesting folders
Patterns * ![Gmail]*
Create Both
SyncState *
Sync All
對上述配置中的一些有趣部分進行一下說明。一個是 PassCmd,它允許你提供 shell 命令來獲取帳戶的密碼。這樣可以避免在配置檔案中填寫密碼。我使用 gpg 的對稱加密,並在我的磁碟上儲存密碼。這當然是由 Unix ACL 保護安全的。
實際上,我想使用我的公鑰來加密檔案,但當指令碼在後臺或透過 systemd 執行時,解鎖檔案看起來很困難 (或者說幾乎不可能)。如果你有更好的建議,我洗耳恭聽:-)。
下一個指令部分是 Patterns。這使你可以有選擇地同步來自郵件伺服器的郵件。這對我來說真的很有幫助,可以排除所有的 “[Gmail]/ folders” 垃圾目錄。
郵件分類
一旦郵件到達你的本地裝置,我們需要一種方法來輕鬆地在郵件讀取器中讀取郵件。我最初的設定使用本地 dovecot 例項提供同步的 Maildir,並在 Gnus 中閱讀。這種設定相比於設定所有的伺服器軟體是有點大題小作,但 Gnus 無法很好地應付 Maildir 格式,這是最好的方法。這個設定也有一個缺點,那就是在你快速搜尋郵件時,要搜尋大量郵件。而這就是 notmuch 的用武之地。
notmuch 允許我輕鬆索引上千兆位元組的郵件檔案而找到我需要的東西。我已經建立了一個小指令碼,它結合了執行 mbsync
和 notmuch
。我使用 dovecot sieve 來基於實際上建立在伺服器端的 Maildirs 標記郵件。下面是我的完整 shell 指令碼,它執行同步分類和刪除垃圾郵件的任務。
#!/bin/sh
MBSYNC=$(pgrep mbsync)
NOTMUCH=$(pgrep notmuch)
if [ -n "$MBSYNC" -o -n "$NOTMUCH" ]; then
echo "Already running one instance of mail-sync. Exiting..."
exit 0
fi
echo "Deleting messages tagged as *deleted*"
notmuch search --format=text0 --output=files tag:deleted |xargs -0 --no-run-if-empty rm -v
echo "Moving spam to Spam folder"
notmuch search --format=text0 --output=files tag:Spam and \
to:vasudev@copyninja.info | \
xargs -0 -I {} --no-run-if-empty mv -v {} ~/Mail/vasudev-copyninja.info/Spam/cur
notmuch search --format=text0 --output=files tag:Spam and
to:vasudev-debian@copyninja.info | \
xargs -0 -I {} --no-run-if-empty mv -v {} ~/Mail/vasudev-copyninja.info/Spam/cur
MDIR="vasudev-copyninja.info vasudev-debian Gmail-1"
mbsync -Va
notmuch new
for mdir in $MDIR; do
echo "Processing $mdir"
for fdir in $(ls -d /home/vasudev/Mail/$mdir/*); do
if [ $(basename $fdir) != "INBOX" ]; then
echo "Tagging for $(basename $fdir)"
notmuch tag +$(basename $fdir) -inbox -- folder:$mdir/$(basename $fdir)
fi
done
done
因此,在執行 mbsync
之前,我搜尋所有標記為“deleted”的郵件,並將其從系統中刪除。接下來,我在我的帳戶上查詢標記為“Spam”的郵件,並將其移動到“Spam”資料夾。你沒看錯,這些郵件逃脫了垃圾郵件過濾器進入到我的收件箱,並被我親自標記為垃圾郵件。
執行 mbsync
後,我基於它們的資料夾標記郵件(搜尋字串 folder:
)。這讓我可以很容易地得到一個郵件列表的內容,而不需要記住列表地址。
閱讀郵件
現在,我們已經實現同步和分類郵件,是時候來設定閱讀部分。我使用 notmuch-emacs 介面來閱讀郵件。我使用 emacs 的 Spacemacs 風格,所以我花了一些時間寫了一個私有層,它將我所有的快捷鍵和分類集中在一個地方,而不會擾亂我的整個 .spacemacs
檔案。你可以在 notmuch-emacs-layer 倉庫 找到我的私有層的程式碼。
傳送郵件
能閱讀郵件這還不夠,我們也需要能夠回覆郵件。而這是最近是我感到迷茫的一個略顯棘手的部分,以至於不得不寫這篇文章,這樣我就不會再忘記了。(當然也不必在網路上參考一些過時的帖子。)
我的系統傳送郵件使用 Postfix 作為 SMTP 客戶端,使用我自己的 SMTP 伺服器作為它的中繼主機。中繼的問題是,它不能是具有動態 IP 的主機。有兩種方法可以允許具有動態 IP 的主機使用中繼伺服器, 一種是將郵件來源的 IP 地址放入 my_network
或第二個使用 SASL 身份驗證。
我的首選方法是使用 SASL 身份驗證。為此,我首先要為每臺機器建立一個單獨的賬戶,它將把郵件中繼到我的主伺服器上。想法是不使用我的主帳戶 SASL 進行身份驗證。(最初我使用的是主賬戶,但 Jonas 給出了可行的按賬戶的想法)
adduser <hostname>_relay
這裡替換 <hostname>
為你的膝上型電腦的名稱或任何你正在使用的裝置。現在我們需要調整 Postfix 作為中繼伺服器。因此,在 Postfix 配置中新增以下行:
# SASL authentication
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_sasl_tls_security_options = noanonymous
relayhost = [smtp.copyninja.info]:submission
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
因此, 這裡的 relayhost
是用於將郵件轉發到網際網路的 Postfix 例項的伺服器名稱。submission
的部分 Postfix 將郵件轉發到埠 587(安全埠)。smtp_sasl_tls_security_options
設定為不允許匿名連線。這是必須的,以便中繼伺服器信任你的移動主機,並同意為你轉發郵件。
/etc/postfix/sasl_passwd
是你需要儲存用於伺服器 SASL 身份驗證的帳戶密碼的檔案。將以下內容放入其中。
[smtp.example.com]:submission user:password
用你已放入 relayhost
配置的 SMTP 伺服器名稱替換 smtp.example.com
。用你建立的 <hostname>_relay
使用者及其密碼替換 user
和 passwd
。
若要保護 sasl_passwd
檔案,併為 Postfix 建立它的雜湊檔案,使用以下命令。
chown root:root /etc/postfix/sasl_passwd
chmod 0600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
最後一條命令將建立 /etc/postfix/sasl_passwd.db
檔案,它是你的檔案的 /etc/postfix/sasl_passwd
的雜湊檔案,具有相同的所有者和許可權。現在重新載入 Postfix,並使用 mail
命令檢查郵件是否從你的系統中發出。
Bonus 的部分
好吧,因為我有一個指令碼建立以上結合了郵件的同步和分類。我繼續建立了一個 systemd 計時器,以定期同步後臺的郵件。就我而言,每 10 分鐘一次。下面是 mailsync.timer
檔案。
[Unit]
Description=Check Mail Every 10 minutes
RefuseManualStart=no
RefuseManualStop=no
[Timer]
Persistent=false
OnBootSec=5min
OnUnitActiveSec=10min
Unit=mailsync.service
[Install]
WantedBy=default.target
下面是 mailsync.service 服務,這是 mailsync.timer 執行我們的指令碼所需要的。
[Unit]
Description=Check Mail
RefuseManualStart=no
RefuseManualStop=yes
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mail-sync
StandardOutput=syslog
StandardError=syslog
將這些檔案置於 /etc/systemd/user
目錄下並執行以下程式碼去開啟它們:
systemctl enable --user mailsync.timer
systemctl enable --user mailsync.service
systemctl start --user mailsync.timer
這就是我從系統同步和傳送郵件的方式。我從 Jonas Smedegaard 那裡瞭解到了 afew,他審閱了這篇帖子。因此, 下一步, 我將嘗試使用 afew 改進我的 notmuch 配置,當然還會有一個後續的帖子:-)。
via: https://copyninja.info/blog/email_setup.html
作者:copyninja 譯者:lixinyuxx 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- 使用postfix與dovecot服務部署郵件系統
- 使用 Postfix 從 Fedora 系統中獲取電子郵件
- 最新ubuntu搭建公網個人郵件伺服器(基於postfix,dovecot,mysql)Ubuntu伺服器MySql
- Centos Linux 7 搭建郵件伺服器(postfix + dovecot)CentOSLinux伺服器
- Win10系統怎麼管理電子郵件和帳戶設定Win10
- windows10系統怎麼設定icloud.com電子郵件WindowsCloud
- win10系統怎樣設定foxmail為預設電子郵件程式Win10AI
- 使用 Notmuch 組織你的郵件
- 如何傳送電子郵件到別人郵箱?電子郵件傳送的方法
- 為SSH登入設定電子郵件提醒
- 電子郵件系統具體安全服務
- 電子郵件
- Postfix-2.11+Dovecot-2.0.9+MySQL+CyMySql
- 救命!我的電子郵件發不到 500 英里以外!
- win10系統中自帶郵件如何設定接收網易郵箱郵件Win10
- 如何在Linux上為SSH登入設定電子郵件提醒Linux
- 在蘋果電腦的Mac郵件上阻止和取消阻止電子郵件地址的方法蘋果Mac
- Outlook如果有多個郵箱,個別郵箱設定不接收郵件的設定方法
- Linux伺服器---郵件伺服器dovecotLinux伺服器
- Centos 7 搭建postfix郵件伺服器CentOS伺服器
- Linux下開源郵件系統Postfix+Extmail+Extman環境部署記錄LinuxAI
- 電子郵件哪個好用?口碑不錯的郵件傳送平臺推薦!
- 區塊鏈不落地?你能將電子郵件系統整合到郵局?區塊鏈
- 如何避免這3 個電子郵件錯誤
- Win10系統禁止Cortana檢測電子郵件資訊的方法Win10
- 共享電子郵件的運作方式
- 電子郵件協議及GO傳送QQ郵件協議Go
- Linux伺服器---郵件服務postfix配置Linux伺服器
- 如何在CentOS中安裝和配置Postfix郵件伺服器CentOS伺服器
- win10系統怎麼設定foxmail新郵件提醒Win10AI
- 你的郵件安全嗎? 電子郵件威脅與防禦剖析
- 卡巴斯基:2020年垃圾郵件佔全球電子郵件流量的50.37%
- 電子營銷郵件設計工具;Direct Mail for MacAIMac
- 怎麼傳送電子郵件到別人郵箱?手把手教你!
- 電子郵件被黑客追蹤黑客
- 用oracle傳送電子郵件Oracle
- 安全使用電子郵件十三法
- 如何保護電子郵件安全