2015-03-19

mutt, procmail, lbdb & UTF-8

Почту я люблю читать mutt-ом, ну нравится он мне. :) А разгребать её я люблю procmail-ом. ;) Всякие правила в лотусах/аутлуках просто рядом не стояли с возможностями этой штуки! Но речь сейчас пойдет не об этом. Точнее не совсем об этом...
Есть у меня в конфиге procmail такая строчка:

:0hc
| lbdb-fetchaddr.p -c utf-8 -a -d "%y-%m-%d"

Для тех, кто не шибко в курсе - поясняю: вся входящая почта пропускается через фильтр, который выгребает из нее mail адреса и кладет в небольшую базу lbdb, откуда потом их можно погрепать из mutt, или любого другого места. Очень удобно... Было бы. Если бы не русские имена в заголовках писем в кодировке utf-8. :( Он их парсит, но увы, больше 30 символов сохранить не дает, обрезает с многоточием. А в utf-8 мы имеем 2 байта на символ.
Очень неприятно потом создавать в mutt письмо адресованное "Иван Василье..." :(

Пришлось порыться маленько в исходниках. Если честно, сильно разбираться не стал, сделал грубый хак. Он работает, так что мне вполне достаточно и этого. ;)

fetchaddr.c.patch 
--- fetchaddr.c.orig 2015-03-19 15:41:31.727513303 +0300
+++ fetchaddr.c 2015-03-19 15:21:57.433246555 +0300
@@ -88,8 +88,8 @@
     }
     if(!p->group && p->mailbox && *p->mailbox && p->personal)
     {
-      if(p->personal && strlen(p->personal) > 30)
- strcpy(p->personal + 27, "...");
+    //  if(p->personal && strlen(p->personal) > 30)
+ //strcpy(p->personal + 27, "...");
 
       if ((c=strchr(p->mailbox,'@')))
  for(c++; *c; c++)