[Mew-Win32 01125] Re: imget and imls runs endless(With PPP)

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
1999年 1月 19日 (火) 12:49:59 JST


こんにちは、しらいです。

From: Yoshitaka Sainomoto <sainmt at example.com> さん曰く
Subject: [Mew-Win32 01124] imget and imls runs endless(With PPP)
Message-ID: <19990119104155U.sainmt at example.com>
Date: Tue, 19 Jan 1999 10:41:55 +0900

sainmt> PPP 接続ですので、C-c C-c 時にはqueuingしてimget時に自動的に
sainmt> queueをflushするように設定しています。
sainmt> 併せてRasconとmew-offlineとで自動的にダイヤルアップに行くように
sainmt> しています。

sainmt> このような環境下で、
sainmt> (1)Summery Modeで「i」-> (2)ダイヤルアップ -> (3)接続完了 
sainmt>              -> (4)queueのflush -> (5)imget

sainmt> (4)の手順において「Sending message ... faild」となり
sainmt> (しかし実際にメールは送れている)
sainmt> (5)のimgetから制御が戻ってきません。
sainmt> C-c C-kでimgetは殺せますが、以降二度imgetをしても正常に動作しません。

imput で spool に入れている最中に
imput --processqueue=on したり
imput --queuestatus=on すると、めちゃくちゃになることがありまし
た。これは、運用面でカバーしています。^^;

sainmt> (さらにmew-win32-mvm.el 0.08+movemail.exeを組み込んでmovemailで
sainmt> 取り込もうとしたときは更に悪い事に(3)〜(4)のあたりでMeadowが
sainmt> 完全に凍りついてしまいます。)

が〜〜〜ん、DialKeeper が導入されてから rascon + mew-win32-mvm
でおかしくなったことはないです。win95 なのですが……

T-Gnus の人で、Win98 + rascon + movemail.exe の人は知っているの
ですが、DialKeeper 以来大丈夫なようです。

imput を使った queue の flush のエラー処理が弱いのかも?

sainmt> そこで質問です。
sainmt> 私のような運用をなさっている方で、安定した環境を構築しておられる方が
sainmt> おられましたらぜひご教示頂きたく思います。

sainmt> RAS Control Packageでかなり安定して接続できるのにimput -q とかを
sainmt> コマンドラインからってのもなんか悲しいです(;_;)

私自身は、mew-offline.el を使っていなくて、.emacs に以下のものを
書いて運用しています。

-------------- next part --------------
;; dialup + mew + movemail + hangup

(defun mew-win32-get-mail (&optional arg entry config)
  "mew を立ち上げて、dialup して、mail を取って、hangup する"
  (interactive "P")
  (if (null rascon-entry-list)
      (rascon-get-entry))
  (if (not entry)
      (setq entry (completing-read "Select dialup entry: "
				   rascon-entry-list
				   nil t nil)))
  (if (not config)
      (setq config (mew-input-config mew-config-imget)))
  (rascon-set-current-entry entry)
  (mew)
  (if (not rascon-mode-indicator)
      (rascon-dialup))
  (if rascon-mode-indicator
      (let ((config-default mew-config-imget))
	(setq mew-config-imget config)
	(if (not arg)
	    (add-hook 'mew-win32-mvm-finish-hook
		      '(lambda ()
			 (rascon-hangup t))))
	(mew-win32-mvm-get)
	(setq mew-config-imget config-default)
	(remove-hook 'mew-win32-mvm-finish-hook
		     '(lambda ()
			(rascon-hangup t))))))

(defun mew-get-hoge (&optional arg)
  "Dialup to HOST & Movemail hoge."
  (interactive "P")
  (mew-win32-get-mail arg "HOST-Name" "USER-Name"))
-------------- next part --------------
そこで、お昼休みに mew-offline.el を見て、mew-win32-mvm.el の最
新版と同期を取りました。以下にパッチをつけておきます。
これで、imget を使うときと同様に、メールの取得が終ったら hangup
します。

# あとは、dialup に失敗したら次に進まない判定を入れました。
-------------- next part --------------
--- mew-offline.el.orig	Thu Dec 24 04:05:58 1998
+++ mew-offline.el	Tue Jan 19 12:26:07 1999
@@ -42,8 +42,6 @@
   "*If not nil, use offline mode with mew-win32-mvm.")
 
 ;; setup
-(if mew-offline-use-mvm-p
-    (require 'mew-win32-mvm))
 (setq mew-auto-get nil)
 (setq mew-auto-flush-queue t)
 
@@ -60,6 +58,19 @@
 		  (if rascon-mode-indicator
 		      (rascon-hangup))))))
 
+;; for mew-win32-mvm
+(if mew-offline-use-mvm-p
+    (progn
+      (require 'mew-win32-mvm)
+      (if (boundp 'mew-win32-mvm-finish-hook)
+	  (add-hook 'mew-win32-mvm-finish-hook
+		    (lambda ()
+		      (if mew-offline-hangup-p
+			  (progn
+			    (rascon-generate-entry-table)
+			    (if rascon-mode-indicator
+				(rascon-hangup)))))))))
+
 ;; dial-up, message get/put
 (defun mew-offline-summary-get ()
   (interactive)
@@ -68,9 +79,10 @@
 	(rascon-generate-entry-table)
 	(if (not rascon-mode-indicator)
 	    (rascon-dialup))))
-  (if mew-offline-use-mvm-p
-      (mew-win32-mvm-get)
-    (mew-summary-get)))
+  (if rascon-mode-indicator
+      (if mew-offline-use-mvm-p
+	  (mew-win32-mvm-get)
+	(mew-summary-get))))
 
 (provide 'mew-offline)
 
-------------- next part --------------
--- mew-win32-mvm.el.orig	Tue Dec 15 16:35:03 1998
+++ mew-win32-mvm.el	Tue Jan 19 10:54:53 1999
@@ -4,7 +4,7 @@
 ;;
 ;;                 Author: "Hideyuki SHIRAI" <Shirai at example.com>
 ;;                Created:             <10/15/1998>
-;;                Revised: Time-stamp: <12/01/1998 18:48 shirai>
+;;                Revised: Time-stamp: <01/19/1999 10:54 shirai>
 ;;
 ;; Usage.
 ;;   Type "M-x mew-win32-mvm-get" at mew summary mode, get mail used movemail.
@@ -32,7 +32,7 @@
 (eval-when-compile
   (require 'mew))
 
-(defconst mew-win32-mvm-version "0.08")
+(defconst mew-win32-mvm-version "0.09")
 
 (defvar mew-win32-mvm-config-list
   '((list "default"  "default.co.jp" "po:default" "-up")
@@ -44,6 +44,8 @@
 4th cell: Movemail parameters.
 \"(car (car mew-win32-mvm-config-list))\" must return \"default\".")
 
+(defvar mew-win32-mvm-finish-hook nil)
+
 ;; Internal variables.
 (defvar mew-win32-mvm-prog (mew-which "movemail.exe" exec-path))
 (defvar mew-win32-mvm-imstore mew-use-imap)
@@ -88,6 +90,13 @@
       (set-marker mew-summary-inbox-position (point) (current-buffer))
       ;; for C-xC-x
       (or arg (goto-char (point-max)))
+      ;; On PPP environment, executing "imget" lets the dial be up.
+      ;; So, it's a good idea to flush queue at this time
+      ;; if messages to be sent exist.
+      (if (and mew-auto-flush-queue
+	       mew-queue-path (file-directory-p mew-queue-path)
+	       (> (length (directory-files mew-queue-path)) 2))
+	  (mew-summary-flush-queue))
       ;; movemail procedure follow.
       (let ((crashbuf (get-buffer-create "*mew movemail*"))
 	    (crashbox (expand-file-name (concat mew-temp-dir "/crashbox"))))
@@ -98,13 +107,6 @@
 	    (delete-file crashbox))
 	(setq mailget (mew-win32-mvm-movemail crashbox crashbuf))
 	(kill-buffer crashbuf)))
-    ;; On PPP environment, executing "imget" lets the dial be up.
-    ;; So, it's a good idea to flush queue at this time
-    ;; if messages to be sent exist.
-    (if (and mew-auto-flush-queue
-	     mew-queue-path (file-directory-p mew-queue-path)
-	     (> (length (directory-files mew-queue-path)) 2))
-	(mew-summary-flush-queue))
     (if (not mailget)
 	()
       ;; imls for new mail.
@@ -114,7 +116,7 @@
 			     mew-inbox-folder
 			     mew-cs-scan
 			     (mew-update-range)))))
-  
+
 (defun mew-win32-mvm-movemail (crashbox crashbuf)
   "Get mail use movemail."
   (interactive "FCrashbox: \nBCrashbuf: ") ;; for Debug.
@@ -162,8 +164,8 @@
 	   (list mew-win32-mvm-usr
 		 crashbox
 		 mew-win32-mvm-passwd))
-
     ;; movemail result check.
+    (run-hooks 'mew-win32-mvm-finish-hook)
     (save-excursion
       (set-buffer crashbuf)
       (goto-char (point-min))
-------------- next part --------------
まさか、

(defun mew-offline-summary-get ()
  (interactive)
  (if mew-offline-dialup-p
      (progn
	(rascon-generate-entry-table)
	(if (not rascon-mode-indicator)
	    (progn
	      (rascon-dialup)
	      (sleep-for 10)))))   ;; <- ここ
  (if rascon-mode-indicator
      (if mew-offline-use-mvm-p
	  (mew-win32-mvm-get)
	(mew-summary-get))))

とかすると OK になっちゃうなんてことはないですよねぇ。
ちなみに、同時に立ち上げる process の個数的には mew-summary-get
より mew-win32-mvm-get の方がやさしいです。
-------------- next part --------------
こういうメールが書きにくいのが Mew の弱点かもしれない :-)

-- 
白井秀行 (mailto:Shirai at example.com)


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