web-dev-qa-db-ja.com

postfix:Maildirメッセージの異なるファイル名形式

Maildir形式でpostfixを使用しています。 maildirに保存されているメッセージのファイル名は次のようになります。

1386021659.27745_1.alpha:2,S

最初の部分はエポック時間であると理解していますが、残りの部分についてはよくわかりません。しかし、私は次のような人間に優しい名前を付けたいと思います

2013-12-18__120502.sender_or_subject_of_the_message:2,S

個々のメッセージ/ファイルを頻繁に操作する必要があります(これが、最初にmaildirを使用している理由です)。より説明的なファイル名があると役立ちます。

これをpostfixに設定できますか?

2
Martin Vegter

いいえ、Postfixには これを構成する方法はありません があります。 @HBruijnが言ったように、Maildir形式は仕様であり、LDAとMUAの両方を異なる形式で合意させるのは かなりの努力 です。そうは言っても、maildir内のファイル名が好きではない場合は、それらを検索するときに少し美しくすることができます。 :

 $ ls |ヘッド-1 
 1325471944.27745_1.beta、S = 10662:2、S 
 
 $ ls |ヘッド-1 | Perl -pe's /(\ d +)/ localtime($ 1)/ e '
 Mon Jan 2 03:39:04 2012.27745_1.beta、S = 10662:2、S 
5
ckujau

Maildir形式の 元の仕様 は、質問に答えるのに良いスタートです。

要件は、新しいメッセージがそれぞれ一意の名前で保存されることです。

Maildirにメッセージを書き込んでいない限り、一意の名前の形式はあなたの仕事ではありません。

一意の名前は、コロン(またはスラッシュ)を含まず、ドットで始まらないものであれば何でもかまいません。 一意の名前から情報を抽出しようとしないでください。

さて、あなたはメッセージを書いています。一意の名前には、ドットで区切られた3つの部分があります。左側は、time()またはgettimeofday()の2番目のカウンターの結果です。右側はgethostname()の結果です。 (無効なホスト名を処理するには、/を\ 057に、:を\ 072に置き換えます。)中央には、以下で説明する配信IDがあります。

.。

昔ながらの配信IDは、配信IDに次の形式を使用します。

  • n、ここでnはプロセスIDであり、このプロセスは1回の配信を行うためにフォークされています。残念ながら、一部の愚かなオペレーティングシステムは、プロセスIDをすばやく繰り返し、標準のtime + pidの組み合わせを破ります。
  • n_m、ここで、nはプロセスID、mはこのプロセスによって行われた配信の数です。

質問の2番目の部分ですが、ローカルの配信エージェントのソースコードを変更しない限り、一意のファイル名を設定するだけでは構成できません。

回避策は.forwardであり、メールをスクリプトにパイプして、メッセージをファイル名とともに好みに合わせて保存し、基本的に独自のローカル配信エージェントを作成します。それはかなり些細なことです。

2
HBruijn