Использование Emacs для работы с электронной почтой и новостями Usenet

Введение

Этот документ знакомит рассказывает о том, как можно использовать Emacs для работы с электронной почтой и новостями Usenet. В статье упоминается GNU Emacs, но практически все сказанное справедливо и для XEmacs.

Достаточно подробный список пакетов для работы с почтой вы можете найти на сервере EmacsWiki

Пакет Gnus

Gnus — это пакет Emacs, разработанный в первую очередь для чтения и отправки новостей Usenet. Его также можно использовать для чтения и написания ответов на сообщения из многих других источников — почты, удаленных каталогов, дайджестов и других источников данных. Большой набор заметок о Gnus вы сможете найти в соответствующем разделе EmacsWiki.

Буфера Gnus

Для показа информации и получения команд Gnus использует несколько разных буферов. Большую часть времени пользователи проводят в трех буферах — буфере групп, буфере резюме и буфере статьи.

Буфер групп содержит перечень групп. Это первый буфер, который Gnus показывает после запуска. Обычно в нем показаны только те группы, на которые вы подписаны, и в которых есть непрочитанные статьи. Используйте этот буфер для выбора конкретной группы.

Буфер резюме построчно перечисляет статьи одной группы. По умолчанию для каждой статьи показываются автор, заголовок и число строк, но это можно настроить по своему вкусу, как и большую часть того, что отображает Gnus. Буфер резюме создается, когда вы выбираете группу в буфере групп, и уничтожается, когда вы покидаете эту группу. Используйте этот буфер для выбора статьи.

Буфер статьи отображает саму статью. При обычном использовании Gnus вы не выбираете этот буфер — все полезные команды, предназначенные для работы над статьей, прекрасно работают и из буфера резюме. Но вы можете выбрать буфер статьи и выполнять все команды Gnus из него, если вы этого хотите.

Запуск Gnus

Для запуска Gnus просто наберите M-x gnus. При запуске Gnus считывает ваш файл инициализации новостей .newsrc и пытается установить связь с локальным сервером новостей, который служит хранилищем статей. Сервер новостей не обязан быть тем же компьютером, на который вы вошли.

Если вы запустили Gnus и соединились с сервером, но не видите в буфере групп ни одной группы, наберите L или A k, чтобы получить список всех доступных групп. Затем нажимайте u на нужной вам группе, чтобы переключать подписку данную группу.

Когда вы запускаете Gnus первый раз, он подписывает вас на несколько избранных групп. Все остальные группы сначала невидимы для вас; вы можете получить их список с помощью последовательности клавиш A k. Все новые группы, появляющиеся в дальнейшем на сервере, становятся для вас зомбированными; чтобы получить их перечень наберите A z. Вы можете подписаться на группы, показанные в этих списках, используя команду u.

Когда вы покидаете Gnus при помощи команды q, то он автоматически записывает в ваших файлах инициализации .newsrc и .newsrc.eld статус подписки всех групп. Обычно вам не стоит редактировать эти файлы вручную, но вы можете это сделать, если точно уверенны, что знаете что надо в них писать.

Работа с Gnus

Для чтения статей из конкретной группы, надо просто установить курсор на нужную группу и нажать на клавишу пробела. При этом будет открыт буфер резюме, в котором будет отображен список непрочитанных статей и отображена первая непрочитанная вами статья. Если непрочитанных статей слишком много, то Gnus выдаст запрос о том, сколько статей необходимо отобразить. Переменная gnus-large-newsgroup определяет пороговое значение, при превышении которого группа будет считаться большой и будет выдаваться предупреждение.

Если вам необходимо увидеть и прочитанные статьи, то для их выбора вам нужно использовать комбинацию C-u space. Кроме этого после префиксной комбинации вы можете указать число, которое определит сколько статей будет выбрано. Положительное число N выбирает N самых последних статей, а отрицательное число — N самых старых статей. Например, C-u - 5 0 space выберет 50 самых старых статей.

Настройка Gnus для работы с электронной почтой

Gnus обрабатывает почту точно также, как и новости Usenet. Чтобы читать электронную почту в Gnus надо просто задать какой метод будет использован для обработки почты и источники ее получения. Это определяется с помощью следующего кода в вашем файле ~/.emacs или ~/.gnus (этот файл используется только для инициализации Gnus):

(setq gnus-secondary-select-methods '((nnml "")))
(setq mail-sources
           '((file :path "/var/spool/mail/user-name")
             (pop :server "pop3.mail.server"
                  :user "user-name"
                  :port "pop3"
                  :password "secret")))

Первая строка задает список вторичных методов получения новостей для Gnus. В нашем примере этот список состоит только из одного элемента — nnml, который задает метод для чтения почты. Вторая и последующая строки перечисляют источники получения почты. Переменная mail-sources содержит список каждый элемент которого является списком, в котором первый элемент указывает на тип источника почты, а затем идет список ключевых слов и значений для них. Список ключевых слов зависит от типа источника почты и полное их описание вы можете найти в справке по Gnus. В нашем примере задается два источника почты: первый — это локальный файл с почтой, который задается путем /var/spool/mail/user-name, а второй источник — это pop3-сервер для которого указывается большее количество ключевых слов, описывающих параметры подключения к данному серверу. Будьте внимательны, помещая пароль для доступа к почте в ваш файл настройки Emacs, если вы хотите хранить в нем ваш пароль, то запретите чтение этого файла для всех остальных пользователей вашей системы.

Gnus обладает очень богатыми возможностями по разбиению почты на группы. Его возможности позволяют разбить почту по множеству признаков. Разбиение почты на группы зависит от содержимого переменной nnmail-split-methods, которая содержит список списков состоящих из пар строк — имени группы и регулярного выражения, при соответствии которому сообщение помещается в соответствующую группу. Следующий код продемонстрирует простой пример обработки входящей почты:

(setq nnmail-split-methods '(
     ("ALT-sisyphus" "^\\(To\\|From\\|Cc\\):.*sisyphus@altlinux\\.ru.*")
     ("ALT-devel" "^\\(To\\|From\\|Cc\\):.*devel@altlinux\\.ru.*")
     ("inbox" "")))

В этом примере создается три группы. В первые две группы помещаются сообщения только из списков рассылки ALTLinux Sisyphus и ALTLinux Devel. В группу inbox помещаются все остальные сообщения, для которых не было совпадения по регулярным выражениям.

Чтобы создать новое почтовое сообщение просто нажмите на клавишу m в буфере групп или буфере резюме. При этом будет отображено новое окно, в котором вы можете ввести адрес получателя и тему сообщения, а также сам текст сообщения. Текст сообщения должен идти после строки

--text follows this line--

Все что находится до этой строки рассматривается как заголовки. Это позволяет вам вручную задавать дополнительные заголовки, такие как, например Bcc. Часть заголовков может подставляться автоматически. Например, чтобы все отправляемые сообщения складывались в отдельную группу, вам необходимо вписать в ваш файл инициализации следующий код:

(setq gnus-outgoing-message-group "nnml:sent")

После установки этой переменной, все отправляемые сообщения будут помещаться в группу sent, доступ к которой осуществляется с помощью метода nnml.

Другие возможности Gnus

В предыдущем тексте было описана лишь малая часть возможностей Gnus. Кроме обычных групп для почты и новостей, Gnus позволяет создавать виртуальные группы, которые состоят из частей других групп. Также можно отображать в виде групп новостей результаты поиска в интернет, сервера каталогов и прочее.

Кроме этого, Gnus обладает мощными средствами по фильтрации сообщений, и отбрасыванию ненужных вам. Работа этого средства основана на подсчете весов сообщения (Scoring). Веса могут добавляться или удаляться в зависимости от текста и заголовка сообщения, его авторов и многим другим параметрам. Это позволяет эффективно работать с новостями, читая только то, что необходимо.

Кроме этого, Gnus умеет взаимодействовать с разными системами определения нежелательных почтовых рассылок, позволяя вам не отвлекаться на ненужную вам почту.

Пакет Rmail

Этот пакет поставляется вместе с GNU Emacs и предназначен для чтения и хранения получаемой вами почты. Для запуска этого пакета достаточно просто набрать M-x rmail. При этом будет прочитан файл с почтой Rmail (обычно это ~/RMAIL), забрана почта из ваших почтовых ящиков, и отображено первое непрочитанное вами сообщение.

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

Кроме основного файла с сообщениями Rmail вы также можете создавать и использовать другие файлы с сообщениями. Почта в эти файлы может поступать из других почтовых ящиков, или вы можете перемещать в них из своего основного файла Rmail.

Rmail предоставляет пользователю возможность назначения меток на конкретные почтовые сообщения, или группы сообщений. Обычно метки используются для классификации сообщений. Затем эти метки можно использовать для сортировки писем, или для перемещения их в другие файлы Rmail.

Более подробную информацию о пакете Rmail можно получить в документации, которая поставляется вместе с GNU Emacs. Вы также можете прочитать об этом пакете в русском переводе руководства по GNU Emacs.

Пакет MH-E

Этот пакет предоставляет доступ к почтовой программе MH прямо из Emacs. Этот пакет поставляется вместе с GNU Emacs, так что нет никакой необходимости устанавливать его самостоятельно.

Пакет поддерживает чтение и отправку электронной почты, в том числе и соответствующих стандарту MIME. Умеет работать с папками, в которых вы можете хранить письма, например, относящиеся к одной теме. Также поддерживается работа с письмами-дайджестами, и письмами закодированными программами shar и uuencode.

Дополнительные пакеты

Отправка почты без использования дополнительных пакетов

GNU Emacs умеет отправлять электронную почту без использования каких либо дополнительных пакетов. Для создания сообщения используется команда compose-mail, которая создает буфер *mail*.

Метод отправки и создания сообщения зависит от того, какое значение имеет переменная mail-user-agent. В настоящее время можно отправлять почту с помощью программы Sendmail, пакетов Emacs MH-E, Gnus и Message.

Для получения более подробной информации смотрите раздел Sending Mail в руководстве по GNU Emacs.

Пакет Supercite

Этот пакет позволяет гибко настроить параметры цитирования чужих писем при ответе на них почтой или в группы Usenet. Пакет поддерживает все основные пакеты Emacs для работы с почтой и новостями.

Когда вы отвечаете на письмо или статью, то производится вызов функции Supercite sc-cite-original, которая производит анализ заголовков исходного текста, запоминая их параметры. Затем Supercite прходится по каждой из строк ответа и изменяет их в соответствии с заданными функциями преобразования. Оригинальное сообщение может быть отформатировано в соответствии с вашими предподчтениями во время работы функций Supercite.

Для того, чтобы любой почтовый пакет Emacs для цитирования писем стал использовать Supercite вам необходимо вставить в ваш файл инициализации ~/.emacs следующую строку:

(add-hook 'mail-citation-hook 'sc-cite-original)

Но если вы используете пакет Gnus, то вам надо добавить еще и следующую строку

(setq news-reply-header-hook nil)

которая предотвратит вставку одинаковых заголовков обоими пакетами. Более полную информацию вы сможете найти в справочных страницах Info, которые поставляются вместе с пакетом.

Пакет Mailcrypt

Этот пакет является интерфейсом к популярной системе шифрования PGP. Он позволяет работать как с оригинальным PGP, так и с его свободным клоном — GnuPG. Использование этих программ возможно из нескольких пакетов для работы с почтой — Gnus, VM, Rmail, MH-E, Mew. Среди реализованных операций — шифрование и расшифровка сообщений, подпись сообщений, проверка электронных подписей. Данный пакет входит в состав дистрибутивов ALT Linux. Кроме того, его можно скачать его с сайта http://mailcrypt.sourceforge.net.

Вот как можно заставить Mailcrypt работать вместе с пакетом Gnus:

(load-library "mailcrypt")
(mc-setversion "gpg")
(autoload 'mc-install-write-mode "mailcrypt" nil t)
(autoload 'mc-install-read-mode "mailcrypt" nil t)
(add-hook 'mail-mode-hook 'mc-install-write-mode)

Первые пять строк одинаковы для всех пакетов работы с почтой. Первая строка загружает пакет Mailcrypt. Вторая строка задает тип программы, которая будет использоваться для обработки почты (в нашем примере это gpg — GNU-версия программы PGP). Третья и четвертая строки описывают, что при вызове функций mc-install-write-mode и mc-install-read-mode необходимо подгрузить их из библиотеки mailcrypt. А пятая строка устанавливает ловушку на запуск режима работы с почтой (mail-mode).

(add-hook 'gnus-summary-mode-hook 'mc-install-read-mode)
(add-hook 'message-mode-hook 'mc-install-write-mode)
(add-hook 'news-reply-mode-hook 'mc-install-write-mode)

Эти команды являются специфическими для пакета Gnus и устанавливают ловушки на создание списка сообщений, создание сообщения и режим ответа на сообщение в Usenet.

В составе пакета для GNU Emacs в дистрибутивах ALT Linux поставляется скрипт инициализации, в котором можно раскомментировать строку, соответствующую используемому вами пакету для работы с почтой. Полное описание пакета и примеры настройки можно найти в руководстве, которое поставляется вместе с пакетом.

Пакет BBDB

Этот пакет позволяет организовать на основе Emacs базу данных для хранения адресов, телефонов и прочей информации. Пакет обеспечивает интеграцию со многими популярными пакетами чтения новостей usenet и почты. Существуют утилиты, которые позволяют экспортировать эту базу данных в формате, понятном для программ синхронизации с популярным PDA Palm Pilot. Данный пакет входит в состав дистрибутивов ALT Linux. Кроме того, пакет можно скачать с его собственного сайта http://bbdb.sourceforge.net.

В руководстве, которое поставляется вместе с BBDB приведены примеры настройки данного пакета для разных пакетов работы с почтой. Следующий пример демонстрирует настройку пакета для работы с почтой с помощью пакета Gnus:

(require 'bbdb)
(bbdb-initialize 'gnus 'message)
(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
(add-hook 'message-setup-hook 'bbdb-define-all-aliases)
(defun my-message-mode-hook () (local-set-key [(tab)] 'bbdb-complete-name))
(setq bbdb-use-pop-up nil)
(defun my-bbdb-tab-complete ()
  (interactive)
  (if (mail-abbrev-in-expansion-header-p)
      (bbdb-complete-name)
    (message-tab)))
(define-key message-mode-map [tab] 'my-bbdb-tab-complete)

Этот пример можно сразу помещать в ваш файл настройки Emacs. Только убедитесь, что у вас установлены пакеты Gnus и BBDB.

Первая строка данного примера производит загрузку самого пакета. Вторая строка производит начальную настройку BBDB, указывая, что пакет будет использоваться вместе с пакетом Gnus (message — это специальный режим из поставки Gnus, который используется при создании электронных сообщений. Третья и четвертая строки устанавливают ловушки для правильной инициализации пакета при запуске соответствующих режимов. Пятая строка устанавливает локальную привязку клавиши Tab для дополнения имен из базы BBDB. Шестая строка запрещает открытие отдельного окна для отображения информации о выбранном пользователе (слишком частое открытие окна может просто раздражать, поэтому и используется такая настройка).

Строки с седьмой по одиннадцатую определяют функцию, которая производит дополнение имени только в том случае, если точка находится в почтовом заголовке. А строка двенадцать связывает данную функцию с клавишей Tab при использовании режима редактирования электронного сообщения.