[mew-dist 18987] Re: (Mew-dist 17552) delete old mails when mew-pop-delete is nil
INOUE Tomohiro
tinoue at example.com
2001年 9月 18日 (火) 19:18:46 JST
[mew-dist 17552] でパッチを出した,井上です.
元のパッチは確か 2.0.51 から当たらなくなったはずです.
kazu さん:
> - Mew にとって新着メールがあった場合、その POP でアクセスした時間を記
> 録
> - 次に POP でアクセスした際に、上記の日時が 3 日より大きくなっていたら
> 消す
> ということですね? この状態の管理は、ちょっと面倒くさそうです。
最初にアクセスした日時を .mew-uidl に記録するパッチを改めて流します.
(2.0.54 に対するパッチです)
以前のパッチには含まれていた,古いメールを自動的に消す部分のコードは
コメントアウトしています.
これは pop server とのコマンドのやり取りが稀にメールヘッダに
取り込まれてしまうというバグがあったためです.
メールをどのタイミングで消せば良いかについてはあまり理解していません.
大原さん:
> 参考にはならないかも知れませんが、私の場合は、
> (setq mew-pop-delete nil) しておいた上で、バックアップの意味も兼ねて、
> n日以上古いメッセージを削除する設定をした imget のプロセスを
> cron で一日一回動かして使っています。
勘違いしているかもしれませんが,
これだと n日以上 mew を使わなかった場合メールを取りこぼしませんか?
(マシンごと止めておけば大丈夫ですが)
参考 [mew-dist 17552]:
> mew-pop-delete が nil の時、
> 「pop server に N 日間だけメールを残す」というのを実装してみました。
> mew-pop-keep に残したい日数を設定します。(config-alist でも可)
> 注意:
> .mew-uidl の書式を変えてしまっているので、最初の一回だけは
> サーバに残っているメールを全部取り直してしまいます。
> 実際に古いメールを消す処理がここ(mew-pop-command-umsg)でいいのか
> どうか良くわかりませんでした。
> また、Truncate されたメールも消してしまうというのはもしかしたら
> 問題かもしれません。
-- 井上 知洋
-------------- next part --------------
*** mew-pop.el.orig Tue Sep 18 17:31:44 2001
--- mew-pop.el Tue Sep 18 18:32:18 2001
***************
*** 557,567 ****
(mew-pop-set-status pnm "quit")
(mew-pop-command-quit pro pnm))))
(defun mew-pop-command-umsg (pro pnm)
(let ((old-msgs (mew-pop-get-messages pnm)) ;; (num siz)
(sul (mew-pop-get-sul pnm)) ;; (siz uid lmsg)
(old-uidl (mew-pop-uidl-db-get pnm))
! num siz uid msgs uidl n siz-uid-lmsg)
(while (re-search-forward "^\\([0-9]+\\) +\\([!-~]*\\)" nil t)
(setq num (mew-match 1))
(setq uid (mew-match 2))
--- 557,575 ----
(mew-pop-set-status pnm "quit")
(mew-pop-command-quit pro pnm))))
+ (defsubst mew-pop-uidl-expired (utime keep)
+ (let ((now (current-time)) day)
+ (when (and (numberp keep) (> keep 0))
+ (setq day (/ (+ (* 65536 (- (nth 0 now) (nth 0 utime)))
+ (- (nth 1 now) (nth 1 utime)))
+ 86400)) ;; one day (* 60 60 24)
+ (if (> day keep) t))))
+
(defun mew-pop-command-umsg (pro pnm)
(let ((old-msgs (mew-pop-get-messages pnm)) ;; (num siz)
(sul (mew-pop-get-sul pnm)) ;; (siz uid lmsg)
(old-uidl (mew-pop-uidl-db-get pnm))
! num siz uid uid-time msgs uidl n siz-uid-lmsg)
(while (re-search-forward "^\\([0-9]+\\) +\\([!-~]*\\)" nil t)
(setq num (mew-match 1))
(setq uid (mew-match 2))
***************
*** 572,581 ****
(if (setq siz-uid-lmsg (mew-assoc-equal uid sul 1))
(setq msgs (cons (cons num siz-uid-lmsg) msgs))))
(t ;; (num siz uidl)
! (if uid (setq uidl (cons uid uidl)))
! (unless (member uid old-uidl) ;; old-uidl doesn't contain nil.
! (setq siz (nth 1 (assoc num old-msgs)))
! (setq msgs (cons (list num siz uid) msgs))))))
(mew-pop-set-uidl pnm uidl)
(setq msgs (nreverse msgs))
(mew-pop-set-messages pnm msgs)
--- 580,597 ----
(if (setq siz-uid-lmsg (mew-assoc-equal uid sul 1))
(setq msgs (cons (cons num siz-uid-lmsg) msgs))))
(t ;; (num siz uidl)
! ;; (if uid (setq uidl (cons uid uidl)))
! (setq uid-time (assoc uid old-uidl))
! (if uid-time
! ; (when (and (not (mew-pop-delete))
! ; (mew-pop-uidl-expired
! ; (cdr uid-time) (mew-pop-keep (mew-pop-get-case pnm))))
! ; (process-send-string pro (format "dele %s%s" num mew-cs-eol)))
! ()
! (setq uid-time (cons uid (current-time)))
! (setq siz (nth 1 (assoc num old-msgs)))
! (setq msgs (cons (list num siz uid) msgs)))
! (if uid (setq uidl (cons uid-time uidl))))))
(mew-pop-set-uidl pnm uidl)
(setq msgs (nreverse msgs))
(mew-pop-set-messages pnm msgs)
*** mew-config.el.orig Fri Aug 31 22:29:06 2001
--- mew-config.el Tue Sep 18 18:44:02 2001
***************
*** 201,206 ****
--- 201,209 ----
(defun mew-pop-delete (&optional case)
(mew-cfent-value case "pop-delete" mew-pop-delete))
+ (defun mew-pop-keep (&optional case)
+ (mew-cfent-value case "pop-keep" mew-pop-keep))
+
;;
(defun mew-nntp-server (&optional case)
*** mew-vars.el.orig Mon Sep 17 10:17:02 2001
--- mew-vars.el Tue Sep 18 18:44:02 2001
***************
*** 499,504 ****
--- 499,510 ----
:group 'mew-pop
:type 'boolean)
+ (defcustom mew-pop-keep 0
+ "*Days to keep messgaes on the pop server when 'mew-pop-delete' is nil
+ 0 means to keep forever."
+ :group 'mew-env
+ :type 'integer)
+
(defcustom mew-pop-size (* 54 1024) ;; 4K hdr + 50K bdy
"*The limit of message size to be retrieved by POP.
0 means no limit, retrives any messages."
*** mew-vars2.el.orig Sat Sep 8 00:11:32 2001
--- mew-vars2.el Tue Sep 18 18:44:02 2001
***************
*** 850,856 ****
\"smtp-user\", \"smtp-auth\", \"smtp-auth-list\",
\"pop-server\", \"pop-port\", \"pop-ssh-server\",
\"pop-user\", \"pop-auth\",
! \"pop-size\", \"pop-body-lines\", \"pop-delete\",
\"inbox-folder\", \"queue-folder\",
\"mailbox-type\", \"mbox-command\", \"mbox-command-arg\",
\"nntp-server\", \"signature-file\", \"content-type\" .
--- 850,856 ----
\"smtp-user\", \"smtp-auth\", \"smtp-auth-list\",
\"pop-server\", \"pop-port\", \"pop-ssh-server\",
\"pop-user\", \"pop-auth\",
! \"pop-size\", \"pop-body-lines\", \"pop-delete\", \"pop-keep\",
\"inbox-folder\", \"queue-folder\",
\"mailbox-type\", \"mbox-command\", \"mbox-command-arg\",
\"nntp-server\", \"signature-file\", \"content-type\" .
Mew-dist メーリングリストの案内