maildir ファイルの mtimes を更新する次の bash スクリプトがあります。
#!/bin/bash
for i in /test/emailfile
do
date=$(sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; b a }' "$i")
newdate=$(date -d "$date" +'%Y%m%d%H%M.%S')
touch -t "$newdate" "$i"
done
このスクリプトは、次のような標準ヘッダーで常に正常に機能します。
Delivery-date: Sun, 22 Apr 2007 00:15:13 -0600
Received: from an-out-0708.google.com ([209.85.132.243])
by x.xxxx.com with esmtp (Exim 4.63)
(envelope-from <xxxxxx@gmail.com>)
id 1HfVLs-0002Io-RQ
for x@xxxxx.com; Sun, 22 Apr 2007 00:15:13 -0600
2007年の配達日があります。ファイルの日付が今日からになるようにそのファイルに触れてからスクリプトを実行すると、ファイルの日付は受信した日付に復元されます。
ただし、次のヘッダーを持つ電子メールでスクリプトを実行しようとすると:
Delivery-date: Mon, 15 Dec 2008 17:26:37 -0800
Received: from xxxxxx ([130.194.13.165])
by xxxxxxx with esmtp (Exim 4.69)
(envelope-from <xxxxxi@xxxxx.xxx.xx>)
id 1LCOhp-0006fm-2g
for xxxxx@xxxxxx.com; Mon, 15 Dec 2008 17:26:37 -0800
日付は明らかに復元されていません。ヘッダーが明らかに異なっていることはわかりません。多くのメール クライアントが filetime を使用して受信した時刻として表示するため、mtimes をリセットする必要があります。私のスクリプトは 3000 通以上の電子メールで機能し、サーバーを移動した後、すべてのクライアントが正しい順序で電子メールを表示し、すべてのファイルが同じ日付で表示されるようにしましたが、何らかの理由で特定の電子メールでは機能しません。スクリプトから明らかなことを残しましたか?
編集: 日付は明らかにスクリプトから復元されますが、mtimes に依存するクライアントは、スクリプトが日付を設定したものに関係なく、このメッセージを表示しません。権限は同じで、レイアウトやファイル名の形式も同じです。以下は ls -la からの投稿です
-rw-rw---- 1 username username 11769 Dec 14 21:25 1229318728.H329820P11297.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 3366 Dec 15 17:26 1229390797.H476913P25671.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 1149 Dec 22 05:39 1229953142.H901034P11016.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 7557 Dec 23 15:43 1230075791.H700954P8392.xxxxx.serverxxxxx.com:2,S
正しく表示されないのは上から2番目のファイルです。なぜこれが起こっているのかをデバッグする方法はありますか?