KamailでGMAILのIMAPフォルダアクセスしても何も表示されなかったので、
imap.lの一部を下記のように変更した。正規表現の部分を直した。
Modified IMAP related part of KaMail (regular expression) as below.
用Kamail不能访问GMAIL的IMAP账户,原因是由于程序的正规表现有点问题。
(defun imap4-fetch (stream num &optional part)
"IMAP4 FETCH"
(unless part
(setq part "RFC822"))
(let ((return "")
(flags "")
mail
last
total)
(message "Fetching ~A as ~A: " num part)
(format (imapstream-stream stream) "~A FETCH ~A (FLAGS ~A)~%" (imap4-tag-increment stream) num part)
(format *imap4-stream-output* "~A FETCH ~A (FLAGS ~A)~%" (imap4-tag-current stream) num part)
(setq return (imap4-read-line stream))
(if (string-match (format nil "^\*[ \t]+~A[ \t]+FETCH[ \t]+(\\(FLAGS[ \t]+(\\)*\\([^)]*\\))*[^{]*{\\([0-9]+\\)}" num) return)
(progn
(setq flags (substring return (match-beginning 2) (match-end 2)))
(setq total (substring return (match-beginning 3) (match-end 3)))
(setq return (imap4-read-line stream))
)
(return-from imap4-fetch nil))
(kamail-interval-message (300)
(while (not (string-match (concat "^" (imap4-tag-current stream) "[ \t]+\\(OK\\|NO\\|BAD\\)") return))
(setq last (length return))
(if mail
(setq mail (concat mail "\n" return))
(setq mail return))
(message "Fetching ~A as ~A: ~D/~A" num part (length mail) total)
(setq return (imap4-read-line stream)))
)
;最後の行を取り除く
(setq mail (substring mail 0 (- (length mail) last)))
(message "~A" return)
(values (imap4-return-ok-p stream return) mail flags total)
)
)
(defun imap4-fetch-to-stream (stream num os)
"IMAP4 FETCH"
(let ((return "")
(flags "")
(part "RFC822")
mail
last
(len 0)
total)
(message "Fetching ~A as ~A" num part)
(format (imapstream-stream stream) "~A FETCH ~A (FLAGS ~A)~%" (imap4-tag-increment stream) num part)
(format *imap4-stream-output* "~A FETCH ~A (FLAGS ~A)~%" (imap4-tag-current stream) num part)
(setq return (imap4-read-line stream))
(if (string-match (format nil "^\*[ \t]+~A[ \t]+FETCH[ \t]+(\\(FLAGS[ \t]+(\\)*\\([^)]*\\))*[^{]*{\\([0-9]+\\)}" num) return)
(progn
(setq flags (substring return (match-beginning 2) (match-end 2)))
(setq total (substring return (match-beginning 3) (match-end 3))))
(return-from imap4-fetch-to-stream nil))
;(msgbox "~S" total)
(message "Fetching ~A as ~A ..." num part)
(read-bytes-from-stream (imapstream-stream stream) os (parse-integer total))
(while (not (string-match (concat "^" (imap4-tag-current stream) "[ \t]+\\(OK\\|NO\\|BAD\\)") return))
(setq return (imap4-read-line stream)))
(message "~A" return)
(imap4-return-ok-p stream return)
))
No comments:
Post a Comment