27.7 mailsyncの概要

mailsyncは、主に次の3種類のタスクに適しています。

27.7.1 設定と使用

mailsyncは、メールボックス自体(ストア)と2つのメールボックス間の接続(チャネル)を区別します。ストアとチャネルの定義は、~/.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 folder 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 関連情報

mailsync/usr/share/doc/packages/mailsync/にあるREADMEには、関連情報が記述されています。またこのトピックに関しては、RFC 2076「Common Internet Message Headers」が特に参考になります。