[mew-dist 23438] Re: POP で取り込めないメールが発生した場合のお願い

ml at example.com ml at example.com
2003年 3月 25日 (火) 18:35:55 JST


POP, IMAP で取り込めないメールが発生しました。
で、メールサーバを覗いて分りました。

ようは、invalid なメールでした。
原因は、CVS のコミット時に syncmail でメールを送信しているのですが、
CVSROOT/cvswrappers にバイナリ扱いとしていなく、バイナリの diff がメー
ルに付けられて送られていました。

この場合、そのメールを送信してしまうこと自体が問題なのですが、
とりあえず、それはおいといて。

仮にそのようなメールを送られた場合に、99% まで取り込んだところで emacs
自体が固まってしまいます。kill -KILL するしかなくなります。できたら、
対応できると嬉しいのですが、mew の取り込み時に対応できるのか、emacs 側
の問題であるのか分りません。

patch ですが、すでにコードが違ってしまってるので当てられない&目視でも
無理でした。

--
nara

Kazu Yamamoto (山本和彦) <kazu at example.com> wrote in message
Date: Mon, 27 Jan 2003 12:25:52 +0900 (JST)
> POP で取り込めないメールが発生した場合のお願いをまとめておきます。
> 
> 原因は、POP サーバから変な文字コードを送られて、Emacs の内部コードが狂
> い process-send-string() が狂うののだと思われます。
> 
> POP で取り込めないメールが発生する人へのお願い:
> 
> まっさらな Mew (anon cvs でも mew-3.1.5x でも OK)に、以下のパッチを当
> てて下さい。
> 
> 取り込めないメールが発生したら、
> 	(setq mew-pop-debug-case 1)
> として、取り込めるか実験して下さい。
> 
> 取り込めないなら、1 を 2 に変えて実験。さらに、3 でも実験して下さい。
> 
> 取り込めると、nil に戻し、再び取り込めないメールが発生するまで待ちます。
> その後、2 や 3 でも実験して下さい。
> 
> それで、1、2、3 それぞれに対し、取り込めるか以下かを教えて下さい。
> 
> おそらく、1 と 2 では取り込めます。3 はあまり自信ないです。でも、3 で
> 取り込めれば、これを解決策として採用したいです。
> 
> --かず
> 
> Index: mew-pop.el
> ===================================================================
> RCS file: /cvsroot/mew/mew/mew-pop.el,v
> retrieving revision 1.146
> diff -c -r1.146 mew-pop.el
> *** mew-pop.el	2003/01/23 06:49:38	1.146
> --- mew-pop.el	2003/01/27 03:21:33
> ***************
> *** 506,514 ****
>         (goto-char (point-max))
>         (insert (format "\n<%s>\n%s\n" label string)))))
>   
>   (defun mew-pop-process-send-string (pro &rest args)
> !   (let ((str (apply 'format args)))
> !     (process-send-string pro (concat str mew-cs-eol))))
>   
>   (defun mew-pop-scan-header ()
>     (goto-char (point-min))
> --- 506,534 ----
>         (goto-char (point-max))
>         (insert (format "\n<%s>\n%s\n" label string)))))
>   
> + (defvar mew-pop-debug-case nil)
> + 
>   (defun mew-pop-process-send-string (pro &rest args)
> !   (cond
> !    ((eq mew-pop-debug-case 1)
> !     (with-temp-buffer
> !       (insert (apply 'format args))
> !       (insert mew-cs-eol)
> !       (process-send-region pro (point-min) (point-max))))
> !    ((eq mew-pop-debug-case 2)
> !     (with-temp-buffer
> !       (mew-set-buffer-multibyte nil) 
> !       (insert (apply 'format args))
> !       (insert mew-cs-eol)
> !       (process-send-region pro (point-min) (point-max))))
> !    ((eq mew-pop-debug-case 3)
> !     (let ((str (concat (apply 'format args) mew-cs-eol)))
> !       (if (fboundp 'string-as-unibyte)
> ! 	  (setq str (string-as-unibyte str)))
> !       (process-send-string pro str)))
> !    (t
> !     (let ((str (apply 'format args)))
> !       (process-send-string pro (concat str mew-cs-eol))))))
>   
>   (defun mew-pop-scan-header ()
>     (goto-char (point-min))
> 



Mew-dist メーリングリストの案内