27.7. mailsync 簡介

mailsync 主要適用於下列三項工作:

27.7.1. 組態與使用

mailsync 可以區分信箱本身 (store) 以及兩個信箱之間的連線 (channel)。「儲存區」與「通道」的定義是儲存在 ~/.mailsync 中。下列段落說明一些儲存區的範例。

簡單的定義可能會如下所示:


store saved-messages { 
   pat Mail/saved-messages
prefix  Mail/
}

Mail/ 是使用者主目錄下之子目錄,它包含電子郵件資料夾,其中包括 saved-messages 資料夾。如果 mailsync 是以 mailsync -m saved-messages 啟動,它會列出 saved-messages 中所有訊息的索引。如果建立了下列定義


store localdir { 
pat     Mail/* 
prefix  Mail/ 
} 

mailsync -m localdir 指令會列出所有儲存在 Mail/ 之下的訊息。相對的,mailsync  localdir 指令會列出資料夾名稱。IMAP 伺服器上某儲存區的設定將如下所示:


store imapinbox {
server {mail.edu.harvard.com/user=gulliver}
ref    {mail.edu.harvard.com}
pat    INBOX 
}

上述範例只能處理 IMAP 伺服器的主要資料夾。子資料夾的儲存區將如下所示:


store imapdir {
server {mail.edu.harvard.com/user=gulliver}
ref {mail.edu.harvard.com}
pat INBOX.*
prefix  INBOX.
}

如果 IMAP 伺服器支援加密的連線,則伺服器設定應該變更為


server {mail.edu.harvard.com/ssl/user=gulliver}

或者,如果不知道伺服器的憑證,則變更為


server {mail.edu.harvard.com/ssl/novalidate-cert/user=gulliver}

稍後會說明該字首。

目前在 Mail/ 下的資料夾應該連線至 IMAP 伺服器的子目錄:


channel folder localdir imapdir {
msinfo .mailsync.info
} 

mailsync 會使用 msinfo 檔案來追蹤已同步化的訊息。

mailsync folder 指令會執行下列動作:

  • 展開兩邊的信箱圖樣。

  • 從產生的資料夾名稱移除字首。

  • 同步化成對的資料夾 (如果它們不存在就建立它們)。

因此在 IMAP 伺服器上的 INBOX.sent-mail 資料夾會與 Mail/sent-mail 本機資料夾同步化 (如果有前述的定義)。在個別資料夾之間的同步化將會依照下列方式執行:

  • 如果在兩邊都已經有某一訊息,則不會執行任何動作。

  • 如果在某一邊缺少某訊息而且為新訊息 (未列在 msinfo 檔案),就會傳輸至該處。

  • 如果訊息僅存在於某一邊而且為舊的 (已列於 msinfo 檔案),就會刪除該處的訊息 (因為另一邊原先所存在的該訊息已遭刪除)。

若想事先知道同步化期間要傳送哪些訊息,以及要刪除哪些訊息,請使用 mailsync  older localdir 來啟動具有通道儲存區的 mailsync。此指令會產生所有在本機主機上列為新訊息的清單,以及同步化期間在 IMAP 那一邊將刪除的所有訊息清單。同樣地,mailsync  folder imapdir 指令會產生所有在 IMAP 那一邊為新訊息的清單,以及同步化期間在本機主機上將刪除的所有訊息清單。

27.7.2. 可能的問題

在資料遺失的事件中,最安全的方法就是刪除相關的通道日誌檔 msinfo。因此,僅存在於某一邊的所有訊息會被視為新訊息,所以會在下一次同步化期間予以傳輸。

只有具有訊息 ID 的訊息會包括在同步化中。缺乏訊息 ID 的訊息則會被忽略,亦即不會傳輸或刪除它們。缺乏訊息 ID 通常是有問題的程式在傳送或撰寫訊息時所造成。

在某些 IMAP 伺服器上,會使用 INBOX 來處理主要資料夾,而子資料夾則會以隨機選取的名稱來處理 (與 INBOX 及 INBOX.name 相對)。因此,像這樣的 IMAP 伺服器無法為子資料夾指定專用的圖樣。

成功地將訊息傳輸至 IMAP 伺服器後,mailsync 所使用的信箱驅動程式 (c-client) 會設定特殊的狀態旗標。因此,mutt 之類的電子郵件程式就無法將這些訊息識別成新訊息。請使用 -n 的選項以停用特殊狀態旗標的設定值。

27.7.3. 如需詳細資訊

/usr/share/doc/packages/mailsync/ 中的 README,是包括在 mailsync 中,它提供更多資訊。在此連線中,RFC 2076「一般網際網路訊息標頭」特別有趣。