Re: Gnus+BBDBでUnparsable addre ssエラー

NAKAJI Hiroyuki <[email protected]> Tue, 07 Oct 2008 11:33:40 +0900
Newsgroups gmane.emacs.gnus.semi.japanese
Message-ID <[email protected]>
中治です。

>>>>> In <[email protected]> 
>>>>>	Katsumi Yamaoka <[email protected]> wrote:

> > さて、このケースでは、emacs/lisp/mail/rfc822.el は悪くなく、つまり、楽天
> > のFromの設定がrfc822違反ということになるでしょうか?

> その From がこんなふうにエンコードされて届いたのであれば、

> From: =?ISO-2022-JP?B?WxskQjNaIXxFNxsoQl0bJEIlSCVpJVklayVLJWUhPCU5GyhC?=
>  <[email protected]>

> RFC822 的には問題無くて、そういうものをデコードした結果を RFC822
> 用の関数に与えるのが間違いなのではないかと思います。とりあえずの
> 対策としては、(rfc822-addresses thisaddr) の代わりに

> (mapcar 'cadr (mail-extract-address-components thisaddr t))

> とでもすれば、"[楽●天]" に関してだけはエラーを起こさないように
> なるでしょう。

From: =?ISO-2022-JP?B?WxskQjNaIXxFNxsoQl0bJEIlSCVpJVklayVLJWUhPCU5GyhC?= <[email protected]>

なので、bbdb-snarf.el の問題である可能性も高いわけですか。

Index: bbdb-snarf.el
===================================================================
RCS file: /cvsroot/bbdb/bbdb/lisp/bbdb-snarf.el,v
retrieving revision 1.46
diff -u -r1.46 bbdb-snarf.el
--- bbdb-snarf.el       20 Apr 2007 22:50:08 -0000      1.46
+++ bbdb-snarf.el       7 Oct 2008 02:32:15 -0000
@@ -584,7 +584,7 @@
     (while (string-match "\\([^,]+\\)," addrline start)
       (let* ((thisaddr (substring addrline 0 (match-end 1)))
              (comma (match-end 0)) ;; rfc822-addresses trashes match-data
-             (parsed (rfc822-addresses thisaddr)))
+             (parsed (mapcar 'cadr (mail-extract-address-components thisaddr t))))
         (if (string-match "(" (or (car parsed) "")) ;; rfc822 didn't like it.
             (setq start comma)
           (setq addrs

としたら、エラーにはならなくなりました。

> 根本的な解は、おそらく BBDB がデコードした文字列を必要とする最後
> の場面まで、受信したままの生データを扱うようにすることでしょう。
> 言うは易し、ですが。

とりあえず、これでしばらく使ってみることにします。いつもありがとうございま
す。
-- 
NAKAJI Hiroyuki (中治 弘行)