メールのバックアップ

2015年8月26日

メール mbsync

メールボックスは大事なデータの一つです。
中にはサービスのパスワード情報、ビジネスや家族の重要メールが多く、 データ損失を避けたい情報源の一つです。

バックアップ方法

クラウドベースバックアップ、有料なソリューションがいろいろありますが、 今回はオープンソースソフトウェアisyncmbsyncというツールを利用します。

mbsyncIMAPMaildir形式を対応しています。

オンラインメールの多くはIMAPを対応しますので、mbsync経由でmaildirとしてバックアップできます。

mbsyncを利用する前に設定ファイルを作成する必要があります。 デフォルトの設定ファイル~/.mbsyncrcとなります。
設定によって、いろいろなワークフローを実装できます。

メールボックスバックアップ(IMAP -> Maildir)

.mbsyncrc

IMAPStore myaccount-remote
Host imap.foo.jp
User account@foo.jp
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

MaildirStore myaccount-local
Path  ~/.mail/account@foo.jp/
Inbox ~/.mail/account@foo.jp/INBOX

Channel myaccount
Master :myaccount-remote:
Slave  :myaccount-local:
Patterns *
Create Slave
Sync Pull
SyncState *

解説

実行方法(すべてのチャンネル)

mbsync -a

実行方法(特定なチャンネル)

mbsync -c myaccount

IMAPサーバの制限により、一回ですべてのメールをコピーされないこともあります、 その場合は同期が完了するまでに再度コマンドを実行すればよいです。

バックアップ復元(Maildir -> IMAP)

メールボックスバックアップとほぼ同じ設定で、チャンネルのMasterSlaveを入れ替えます。

IMAPStore myaccount-remote
Host imap.foo.jp
User account@foo.jp
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

MaildirStore myaccount-local
Path  ~/.mail/mail@foo.jp/
Inbox ~/.mail/mail@foo.jp/INBOX

Channel myaccount
Master :myaccount-local:
Slave  :myaccount-remote:
Patterns *
Create Slave
Sync Pull
SyncState *

アカウント移行(IMAP -> IMAP)

mbsyncは直接一つのIMAPメールボックスの内容を別なIMAPメールボックスにコピーすることができます。 メールアドレスを変更の際に役立つ機能です。

設定では2つのIMAPストアとコピー用チャンネルとなります。

IMAPStore myaccount-from
Host imap.foo.jp
User account@foo.jp
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore myaccount-to
Host imap.bar.jp
User account@bar.jp
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

Channel imap-copy
Master :myaccount-from:
Slave  :myaccount-to:
Patterns *
Create Slave
Sync Pull
SyncState ~/.mail/imap-copy

注意する箇所はChannelSyncState設定。 IMAPストアに同期状態ファイルは保存できないため、 ローカルファイルに保存します。

メールクライアントと一緒に使う

maildir形式メールボックスを対応するメールクライアントを使えば、mbsyncをメールクライアントのメール取得コンポネントとして利用できます。

このワークフローには下記のメリットがあります:

IMAPStore myaccount-remote
Host imap.foo.com
User account@foo.jp
Pass mypassword
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

MaildirStore myaccount-local
Path  ~/.mail/account@foo.jp/
Inbox ~/.mail/account@foo.jp/INBOX

Channel myaccount
Master :myaccount-remote:
Slave  :myaccount-local:
Patterns *
Create Slave
Sync PullNew Push
SyncState *

大事な設定はSyncです。
PullNew Pushに設定することで、IMAPから新しいメールを取得してから、ローカルメールボックスの情報をIMAPへ同期する。 そのため、IMAP側の不具合やハックでメールが削除されても、バックアップのメールは削除されません。

mbsync -c myaccountを実行ると同期できます。
cronjobmbsyncコマンドを登録するとメール同期を自動化できます。

Sync設定で同期を細かくできるので、自分のメールワークフローに合わせることができます。

maildir対応クライアント