воскресенье, 9 мая 2010 г.

Requiem for a GMail webinterface

На днях я подписался на списки рассылки Debian, и моя привержённость к веб-интерфейсу гуглопочты дала трещину. Работа интерфейса не устраивает меня по ряду причин:
  1. при ответе создаётся сообщение, адресованное автору поста, а не в список.
  2. при цитировании используется неудобный формат текста перед цитатой оригинального поста — там присутствует email автора, но отсутствует часовой пояс цитируемого
Обе проблемы идут вразрез с этикетом рассылок, потому-то я и уделяю им столько внимания.

Короче, назрел переход на локальный почтовик, что и было проделано в течении пары дней. Эта заметка написана, так сказать, по горячему следу. Она собрала в себе все проблемы, с которыми я столкнулся. В основном это какие-то мелочи, детали, которых я не знал, но которые оказались важными. Я постарался по возможности превратить пост в гайд, так что будет много ссылок и текста.

Итак, я выбрал популярную и многими обкатанную конфигурацию: fetchmailprocmailmuttmsmtp. О том, как её настраивать, читайте в Gentoo wiki (для настройки msmtp придётся заглянуть в английскую версию). Чтобы лучше понять процесс обработки почты в *nix, советую почитать MailConcept — «A short introduction to the notorious MxA bunch». А чтобы понять наконец, как всё это конфигурировать применительно к GMail, взгляните на «Using Mutt with Gmail».

Теперь обратим внимание на некоторые моменты, которые помешали мне быстро и качественно всё отконфигурировать.

Во-первых, я возомнил себя шибко умным, а автора последнего гайда — не сведущим в моих задачах, и потому опцию no keep в настройках fetchmail сменил на keep (мотивируя это тем, что я не хочу удалять почту с сервера). Но помощь гугла внятно утверждает, что ничего с моими письмами не произойдёт — получая от клиента команду удалить письмо, GMail предпринимает действие, заданное пользователем (их четыре — можно оставить копию во Входящих, пометить письмо как прочитанное, архивировать или удалить с сервера). По этой причине я долго не мог получить все письма — у меня их около полторы тысячи штук, а POP никак не хочет отдавать больше 460-488-ти за раз. Закончилось всё известной мерой — я попал в Lockdown in section 4 на период около шести часов. Эта блокировка распространяется только на POP и IMAP — доступ к веб-интерфейсу остаётся, так что можете не волноваться: что бы ни случилось, почта у вас будет :)

Второй ошибкой было использование ящика типа mbox (все письма в одном файле). Когда я наконец-то пришёл к выводу, что пора бы перестать качать письма с GMail, а юзать локальную копию, оказалось, что предложенный мне рецепт:
find $MAILDIR -type f | while read mail; do procmail < "$mail"; done
работает только с ящиками типа Maildir (в ящике есть три поддиректории — cur, new и tmp; каждое письмо лежит в отдельном файле). Пришлось в срочном порядке искать способ сконвертировать mbox в maildir, который и нашёлся в лице mb2md. Правда, в конечном итоге я все равно качал всё заново — но уже в maildir ящик…

Ещё одно важное замечание касается опции fetchmailsslfingerprint. По всему интернету приводятся хитрые рецепты вроде скачивания откуда-то SSL сертификата (или поиск оного в недрах ca-certificates) и последующего вычисления отпечатка. Но можно пойти простым путём: указать заведомо неправильный отпечаток, после чего запустить fetchmail с опцией --verbose и посмотреть на вывод. В нём вы найдёте отпечаток, который выслал сервер — его-то и следует указать в конфиге.

Дальше по плану у нас mutt. Вобщем-то, кое-какую рабочую конфигурацию можно набросать уже после прочтения гентушной вики, но я бы посоветовал взглянуть также на «Настройку Mutt для чайника». После этого у вас будет довольно юзабельный почтовик — можете начинать тестить.

Впрочем, предела совершенству нет, и я рискну рассказать о том, что я добавил в .muttrc сверх уже упомянутых в статьях настроек.

Первым дополнением стала адресная книга. Прикрутить такое мирское благо помогла статья Дмитрия Аленичева «Настройка почтовой системы в Linux» — там упомянута замечательная тулза по имени abook, реализующая весь необходимый функционал. Для того, чтобы управлять этим чудом прямо из mutt, нужно добавить в конфиг последнего две строки:
# Use abook with Mutt
# Q to search
# a to add sender to abook
set query_command="abook --mutt-query '%s'"
macro index,pager a "|abook --add-email\n" 'add sender to abook'
Комментарии, как мне кажется, исчерпывающи.

Вторым важным дополнением стала реализация работы с рассылками (ведь именно они и сподвигли меня на переход к локальному почтовику). Итак, в первую очередь надо приучить mutt отвечать не собственно автору поста, а прямиком в список рассылки:
set followup_to = yes
set honor_followup_to = yes
Во-вторых, следует объяснить почтовику, на какие рассылки я подписан:
subscribe e-mail_рассылки
И последнее, чем я особо горжусь — локальные копии отсылаемых сообщений будут ложиться в ящики, соответствующие рассылке:
# дефолтный ящик
set record = "+inbox"
# выбираем ящик в зависимости от рассылки
fcc-save-hook ~Cадрессрассылки ящик
Прекрасно, не правда ли? ☺

Кстати, вернусь немного назад и расскажу про сортировку рассылок в procmail. К этой задаче есть несколько подходов: некоторые советуют писать правила, используя ^TO_, а некоторые настаивают на использовании более рассылко-специфичных полей. Наиболее полное описание проблемы и её решений дано здесь. На тему работы с рассылками в mutt также написана неплохая статья «Using Mutt to send emails to mailing lists» — советую почитать и её тоже.

С msmtp — последним звеном нашей почтовой цепочки — проблем вообще никаких: всё просто работает; так что о нём я писать не буду вообще ничего ;)

Happy mutting, procmailing и всего такого прочего!

Копируете статью — поставьте ссылку!

19 комментариев:

Denis Evsyukov комментирует...

Список рассылки Debian??
Слишком много там упертых Одминов. Было дело, пытался читать, общаться.
В итоге просто отписался. Делать там нечего. А уж ради "такой" рассылки менять клиенты... Извините меня.

Minoru комментирует...

Хм… А я читаю и пишу с огромным удовольствием.

А в чём выражается упёртость админов, если не секрет?

Denis Evsyukov комментирует...

Как раз в следовании стандартам.
Давно уже все рассылки используют модифицированную версию стандарта при отправлении сообщений в рассылки, тут же четкое следование.
Удобство использования в расчет не берется. Делается не для людей, а для бумажки.
Про ответы на вопросы я вообще молчу. Задавать вопросы там очень сложно.

Minoru комментирует...

Интересно… А о каком стандарте (и какой модифицированной версии) речь? Можно ссылки или хотя бы названия?

Касательно ответов буду возражать. Я лично задал несколько вопросов — на все ответили в течении пары часов. Всё корректно и очень приятно.

И, наверное, мне стоит уточнить, что я говорю о debian-user — она самая активная из тех, на которые я подписан. А ты о какой?

Denis Evsyukov комментирует...

Точное название рассылки не помню уже. Точно скажу только одно, она была русскоязычная.

Стандарт использования использования заголовков почтовых сообщений.

Minoru комментирует...

> Стандарт использования использования заголовков почтовых сообщений.

Стало быть, речь об List-id, X-mailing-list и прочих? Хм… Меня не раздражает совершенно — написал в procmail правила с использованием List-id и забыл. Если подпишусь ещё на что-то и там будут использоваться другие поля, напишу соответствующие правила. Какая разница, если всё работает?

Анонимный комментирует...

достаточно интересный вариант использование offlineIMAP вместо связки "fetchmail → procmail". С его помощью можно получить полную offline копию ящика и простую синхронизацию, что позволяет во-первых получать доступ к почте при отсутствии интернет соединения, во-вторых получать доступ к той же почте, когда есть соединение, но нету самого mutt.

+ можно ещё использовать для поска mairix
тут инфа

Minoru комментирует...

IMAP? Да, думал о нём — как-никак, возможностей больше, чем у POP; с другой стороны, я пока что не чувствую, чтобы новая система меня ограничивала — так что всё в порядке.

Спасибо за mairix — вики mutt'а уже читаю, но до историй пользователей ещё не дошёл.

Анонимный комментирует...

Сам о таком подумывал тока в связке imap + getmail - слышал что fetchmail письма иногда теряет.
Вопрос однако: а как с теми кто присылает вместо нормальных писем html и картинки всякие - есть способ это всё безгеморойно глядеть или придётся сохранять и смотреть отдельно?

Minoru комментирует...

Да, способ есть. Читайте «Настройку mutt для чайника» — там в конце написано про .mailcap, в котором можно сопоставить каждому MIME-типу свой просмотрщик. Пропишешь для text/html iceweasel — и будет тебе счастье :)

Я, правда, использую w3c и доволен — на картинки все равно пофиг, ради них и в веб-интерфейс можно залогиниться.

Мой ~/.mailcap:

text/html; w3m -T text/html %s; needsterminal;

Sergey комментирует...

Попробуйте, попробуйте IMAP. POP3 совсем не заточен под хранение почты на сервере, тем более в таких количествах, как на GMail. POP3 позволяет лишь запросить список сообщений и выкачивать их поштучно (и удалять). IMAP же именно и создан для синхронизации удалённого почтового ящика, со всей его структурой (папками и состоянием писем) и локального. В обе стороны. Без потерь писем и без повторных скачиваний. В качестве бонуса при использовании IMAP сохраняется доступ к меткам и фильтру спама GMail. Ещё преимущество в том, что клиенты можно безболезненно менять и читать почту с разных машин. Я, например, использую и Thunderbird, и mutt, и вебинтерфейс. И все они дружно работают с одним и тем же ящиком.

Об OfflineIMAP. Последний раз, когда я его пробовал, года два назад, наблюдал проблемы с кодировками. Проект сейчас сопровождается минимально (фиксятся баги, но развития не планируется). Кстати, сам автор OfflineIMAP сейчас использует Thunderbird 3 на большинстве своих машин.

Анонимный комментирует...

> text/html; w3m -T text/html %s; needsterminal;

бывает полезно добавить w3m -O utf-8 -I %{charset}
т.к. некоторые почтовики (web интерфейс gmail) любят указывать кодировку только в описании Content-Type вложения, из-за этого w3m может не угадать кодировку.


у меня стоит

> text/html; w3m -O utf8 -I %{charset} -dump %s; copiousoutput; description=HTML Text; nametemplate=%s.html

хотя это возможно излишне.

> Об OfflineIMAP. Последний раз, когда я его пробовал, года два назад, наблюдал проблемы с кодировками.

у меня были проблемы с кодировками названий папок, и была решена переключением на английский интерфейс, хотя есть и более адекватные решения

Minoru комментирует...

Сергей. вы меня таки убедили — как только найду достаточно времени, настрою себе IMAP.

qnikst, спасибо за совет — хоть я пока и не сталкивался с некорректно отображаемым html, поправлю свой .mailcap

lizardie комментирует...

> 1. при ответе создаётся сообщение, адресованное автору поста, а не в список.
Проблема решается ровно тремя щелчками мышки во вкладке Labs.

> 2. при цитировании используется неудобный формат текста перед цитатой оригинального поста — там присутствует email автора, но отсутствует часовой пояс цитируемого
Я точно не знаю, как это вылечить, но думаю, что несложно сделать, используя Greasemonkey (если вы пользуетесь firefoxом)

Minoru комментирует...

lizardie, а поточнее можно касательно Labs? Признаю́, что это для меня потёмки.

А вот утяжелять и так неповоротливого огнелиса лишними дополнениями нет никакого желания…

lizardie комментирует...

ну, в gmail'е в верхней панели справа есть иконка, типа лабораторной колбы - там много разных дополнительных настроек - "crazy experimental stuff", как они их называют.
Внизу страницы есть пара ссылок, где можно предложить то, чего тебе в гмайле не хватает, или самому написать.

Minoru комментирует...

М, ясно. Я когда-то заглядывал в Лабораторию, увидел там длиннющий список и ужаснулся. Не знал, что там есть кнопка для того, чтобы предложить идею. Надо будет попользоваться. Спасибо!

Анонимный комментирует...

Как-то слишком наворочено все. А зачем столько плясок с бубном если можно использовать какойнить thunderbird и запросто настроить его на ответ в подходящем формате? И почту IMAPом прямо по папкам 1 в 1 синхронизировать. Несколько не unix-way, но в конечном итоге почта попадет в те же mailbox files по сути.

Minoru комментирует...

Плясок с бубном? Мне нравится узнавать что-то новое, так что я не рассматриваю всё это как скучный и нудный процесс.

Почта у меня уже синхронизируется по IMAP — недавно настроил.

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

 
Blogger logo Debian logo Creative Commons License FeedBurner Subscribers Counter