Чтение почты с помощью Rmail

Rmail -- это подсистема Emacs для чтения и размещения получаемой вами почты. Rmail хранит почтовые сообщения в файлах, называемых Rmail-файлами. Чтение сообщений в Rmail-файле осуществляется в специальном основном режиме, режиме Rmail, который переопределяет большинство букв для запуска команд управления почтой. Команда rmail-mode используется для входа в режим Rmail, она запускает ловушку rmail-mode-hook, как обычно; но не выполняйте эту команду вручную, она не может делать ничего существенного, если этот буфер не обращается к правильному Rmail-файлу.

Основные понятия Rmail

При простейшем использовании Rmail, у вас есть один Rmail-файл `~/RMAIL', в котором сохраняется вся ваша почта. Этот файл называется первичным Rmail-файлом. Команда M-x rmail считывает ваш первичный Rmail-файл, вставляет в него новую почту из ваших входных файлов, отображает первое непрочитанное сообщение и позволяет вам начать чтение. Переменная rmail-file-name задаёт имя первичного Rmail-файла.

Rmail использует сужение, чтобы скрыть из Rmail-файла все сообщения, кроме одного. Показанное сообщение называется текущим. Специальные команды режима Rmail могут осуществлять такие вещи, как удаление текущего сообщения, копирование его в другой файл, посылка ответа или перемещение к другому сообщению. Вы также можете создать несколько Rmail-файлов и использовать Rmail для обмена сообщениями между ними.

В пределах Rmail-файла сообщения расположены последовательно в порядке поступления; вы можете использовать другие способы сортировки. Сообщениям присваиваются последовательные целые числа в качестве их номеров сообщений. Номер текущего сообщения показывается в строке режима Rmail, за ним идет общее число сообщений в файле. Вы можете перейти на сообщение, задавая его номер с помощью ключа j (смотрите раздел Перемещение по сообщениям).

Следуя обычным правилам Emacs, изменения в Rmail-файле становятся постоянными только после сохранения этого файла. Вы можете осуществить это с помощью команды s (rmail-save), которая также сперва вычеркивает удаляемые сообщения из файла (смотрите раздел Удаление сообщений). Для записи файла без вычеркивания следует использовать C-x C-s. Rmail также сохраняет Rmail-файл при поступлении новой почты из входного почтового файла (смотрите раздел Rmail-файлы и входные почтовые ящики).

Выйти из Rmail можно с помощью q (rmail-quit), при этом Rmail-файл очищается и сохраняется, и происходит переход в другой буфер. Но формально нет необходимости `выходить'. Если вы переключились из Rmail к редактированию в других буферах и больше не возвращались обратно, на самом деле вы вышли. (Команда Rmail b делает это для вас.) Достаточно просто убедиться, что вы сохранили Rmail-файл (как и любой другой измененный вами файл). Достаточно удобный способ сделать это предоставляет команда C-x s (смотрите раздел Сохранение файлов).

Прокрутка в сообщении

Когда Rmail показывает сообщение, не помещающееся на экране, вам придется прокручивать это сообщение, чтобы прочитать оставшуюся часть. Вы могли бы сделать это с помощью C-v, M-v и M-<, но в Rmail прокруткой приходится пользоваться настолько часто, что её команды заслуживают более простого набора.

SPC
Прокручивает вперёд (scroll-up).
DEL
Прокручивает назад (scroll-down).
.
Прокручивает к началу сообщения (rmail-beginning-of-message).

Так как во время чтения сообщения наиболее частой процедурой является прокрутка по целому экрану, Rmail делает SPC и DEL синонимами C-v (scroll-up) и M-v (scroll-down).

Команда . (rmail-begining-of-message) прокручивает к началу выбранного сообщения. Это не совсем то же, что и M-<: во-первых, она не оставляет метку, а во-вторых, она переустанавливает границы буфера до пределов текущего сообщения, если вы их изменили.

Перемещение по сообщениям

Самое основное, что вы можете сделать с сообщением -- прочитать его. В Rmail вы можете прочитать сообщение, сделав его текущим. Обычно при этом последовательно перемещаются по файлу, так как сообщения в нем расположены в порядке получения. При входе в Rmail вы попадаете на первое сообщение, которое никогда ещё не было текущим (это первое сообщения, имеющее атрибут `unseen'; смотрите раздел Атрибуты в Rmail). Чтобы увидеть другие новые сообщения, двигайтесь вперёд, для повторного просмотра старых двигайтесь назад.

n
Перейти к следующему неудалённому сообщению, пропуская все промежуточные удалённые сообщения (rmail-next-undeleted-message).
p
Перейти к предыдущему неудалённому сообщению (rmail-previous-undeleted-message).
M-n
Перейти к следующему сообщению, включая удалённые (rmail-next-message).
M-p
Перейти к предыдущему сообщению, включая удалённые (rmail-previous-message).
j
Перейти к первому сообщению. С аргументом n -- перейти к сообщению с номером n (rmail-show-message).
>
Перейти к последнему сообщению (rmail-last-message).
<
Перейти к первому сообщению (rmail-first-message).
M-s regexp RET
Перейти к следующему сообщению, содержащему совпадение с регулярным выражением regexp (rmail-search).
- M-s regexp RET
Перейти к предыдущему сообщению, содержащему совпадение с regexp.

n and p -- это обычный способ перемещения по сообщениям в Rmail. Они перемещают по сообщениям последовательно, но пропускают удалённые сообщения, что обычно вы и хотели бы делать. Эти команды называются rmail-next-undeleted-message и rmail-previous-undeleted-message. Если вы не хотите пропускать удалённые сообщения, например, если вы хотите переместиться к сообщению, чтобы отменить его удаление, используйте варианты M-n и M-p (rmail-next-message и rmail-previous-message). Числовой аргумент в любой из этих команд используется как счетчик повторов.

В Rmail вы можете задать числовой аргумент, набрав только цифру. При этом не требуется сначала набирать C-u.

Команда M-s (rmail-search) -- это версия поиска для Rmail. Обычная команда наращиваемого поиска C-s работает в Rmail, но она осуществляет поиск только в пределах текущего сообщения. Цель команды M-s -- поиск другого сообщения. Она считывает регулярное выражение (смотрите раздел Синтаксис регулярных выражений) без наращивания и затем осуществляет поиск совпадения, начиная с начала следующего сообщения. Потом она выбирает сообщение, содержащее совпадение. Если regexp пусто, M-s использует регулярное выражение, заданное при предыдущем поиске.

Чтобы найти в файле другое сообщения в обратном направлении, задайте команде M-s отрицательный аргумент. В Rmail это можно сделать как - M-s.

Также возможен поиск сообщения по метке. Смотрите раздел Метки.

Для передвижения к сообщению, задаваемому абсолютным номером, используйте команду j (rmail-show-message) с номером сообщения в качестве аргумента. Без аргумента, команда j выбирает первое сообщение. < (rmail-first-message) также выбирает первое сообщение. Команда > (rmail-last-message) выбирает последнее.

Удаление сообщений

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

Вычеркивание в Rmail-файле (или его очистка) действительно уничтожает удалённые сообщения. Остальные сообщения последовательно перенумеровываются. Вычеркивание -- это единственное действие, кроме разбора дайджеста (смотрите раздел Сообщения-дайджесты), которое изменяет номера сообщений.

d
Удалить текущее сообщение и перейти к следующему неудалённому (rmail-delete-forward).
C-d
Удалить текущее сообщение и перейти к предыдущему неудалённому (rmail-delete-backward).
u
Отменить удаление текущего сообщения или перейти назад к удалённому сообщению и отменить его удаление (rmail-undelete-previous-message).
x
Очистить Rmail-файл (rmail-expunge).

Существуют две команды Rmail для удаления сообщений. Обе они удаляют текущее сообщение и выбирают другое. Команда d (rmail-delete-forward) переходит к следующему сообщению, пропуская уже удалённые, в то время как C-d (rmail-delete-backward) передвигает к предыдущему неудалённому сообщению. Если же нет неудалённого сообщения, к которому можно перейти в указанном направлении, то текущим остается сообщение, которое было только что удалено. Числовой аргумент меняет направление движения после удаления.

Всякий раз, когда Rmail удаляет сообщение, он вызывает функции, перечисленные в rmail-delete-message-hook. Когда вызываются функции этой ловушки, сообщение уже помечено как удалённое, но всё ещё является текущим в этом буфере Rmail.

Для того чтобы все удалённые сообщения окончательно исчезли из Rmail-файла, надо набрать x (rmail-expunge). Пока это не сделано, есть возможность отмены удаления сообщений. Команда отмены удаления, u (rmail-undelete-previous-message), предназначена для отмены действия команды d в большинстве случаев. Она отменяет удаление текущего сообщения, если оно было удалено. В противном случае она двигается к предыдущему сообщению до тех пор, пока не будет найдено удалённое сообщение, и производит отмену удаления этого сообщения.

Обычно вы можете отменить действие d с помощью команды u, так как u передвигает назад и отменяет удаление сообщения, произведенное командой d. Но это не работает, когда d пропускает несколько уже удалённых сообщений, которые следуют за удаляемым сообщением; в этом случае команда u будет отменять удаление последнего сообщения из тех, что были пропущены. Не существует совершенного способа обойти эту проблему. Однако, повторяя команду u, можно в конце концов вернуться к сообщению, для которого вы собирались отменить удаление. Можно также добраться до этого сообщения с помощью команды M-p и затем набрать u.

Удалённое сообщение имеет атрибут `deleted', и как результат при удалении текущего сообщения в строке режима появляется слово `deleted'. На самом деле, удаление или отмена удаления сообщения --- это не более чем добавление или уничтожение этого атрибута. Смотрите раздел Атрибуты в Rmail.

Rmail-файлы и входные почтовые ящики

Операционная система помещает приходящую вам почту в файл, который мы называем вашим входным почтовым ящиком. Когда вы запускаете Rmail, он выполняет написанную на Си программу movemail, чтобы скопировать новые сообщения из входного почтового ящика в первичный Rmail-файл, который также содержит другие сообщения, сохранившиеся от предыдущих сеансов Rmail. Именно в этом файле находится та корреспонденция, которую вы читаете с помощью Rmail. Эта процедура называется получением новой почты. В любой момент она может быть повторена в Rmail с помощью команды g.

Переменная rmail-primary-inbox-list содержит список имен файлов, являющихся входными почтовыми ящиками вашего первичного Rmail-файла. Если вы не установили эту переменную явно, она инициализируется значением переменной среды `MAIL', или, в крайнем случае, устанавливается в значение nil, что означает использование входного почтового ящика по умолчанию; это могут быть файлы `/var/mail/имя-пользователя', `/usr/mail/имя-пользователя' или `/usr/spool/mail/имя-пользователя' в зависимости от вашей операционной системы.

Чтобы узнать значение по умолчанию для вашей системы, используйте C-h v rmail-primary-inbox RET. Вы можете указать входной файл (или файлы) для любого Rmail-файла с помощью команды set-rmail-inbox-list; смотрите раздел Множество почтовых файлов.

Есть две причины для разделения Rmail-файлов и входных почтовых ящиков.

  1. Формат входных почтовых файлов изменяется от одной операционной системы к другой и зависит от других почтовых программ. Только одна часть Rmail должна знать об этих альтернативах и должна лишь понимать, как преобразовывать их все к собственному формату Rmail.
  2. Обеспечение доступа в файл входного почтового ящика без возникновения опасности потери почты -- очень громоздкая вещь, поскольку требует взаимных блокировок с доставкой почты. Кроме того, различные операционные системы используют разную технику блокировок. Стратегия перемещения почты из входного почтового ящика раз и навсегда в отдельный Rmail-файл устраняет необходимость блокировки всего остального в Rmail, так как только Rmail работает с Rmail-файлом.

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

Множество почтовых файлов

По умолчанию Rmail действует в вашем первичном Rmail-файле, называемом `~/RMAIL', и получает вашу приходящую почту из системного входного почтового файла. Но вы можете также иметь другие Rmail-файлы и редактировать их с помощью Rmail. Эти файлы могут получать почту через их собственные файлы входных почтовых ящиков, или вы можете перемещать в них сообщения с помощью явных команд Rmail (смотрите раздел Копирование сообщений в файлы).

i файл RET
Считать файл в Emacs и запустить в нем Rmail (rmail-input).
M-x set-rmail-inbox-list RET файлы RET
Задать имена входных почтовых файлов, откуда будет получать почту текущий Rmail-файл.
g
Получить новую почту из входных почтовых ящиков текущего Rmail-файла (rmail-get-new-mail).
C-u g файл RET
Получить новую почту из входного почтового ящика файл.

Чтобы запустить Rmail для файла, отличного от вашего первичного почтового файла, можно использовать в Rmail команду i (rmail-input). Она обращается к этому файлу в режиме Rmail. Вы также можете использовать команду M-x rmail-input, даже не находясь в Rmail.

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

Вы также можете выбрать Rmail-файл из меню. Сначала выберите пункт меню Classify, из меню Classify выберите пункт Input Rmail File; затем выберите нужный вам файл. Переменные rmail-secondary-file-directory и rmail-secondary-file-regexp указывают, какие файлы предлагает это меню: первая переменная говорит, в каком каталоге их искать; вторая говорит, какие файлы в этом каталоге предлагать (все, чьи имена соответствуют регулярному выражению). Эти переменные также относятся к выбору файла для вывода (смотрите раздел Копирование сообщений в файлы).

Каждый Rmail-файл может содержать список имён файлов входных почтовых ящиков; вы можете задать этот список с помощью M-x set-rmail-inbox-list RET files RET. Аргумент может содержать любое число имён файлов, разделенных запятыми. Он может быть также пустым, и это означает, что этот файл не должен иметь входных почтовых ящиков. Как только указан список входных почтовых ящиков, Rmail-файл запоминает его и сохраняет до тех пор, пока он явно не будет изменен.

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

Команда g (rmail-get-new-mail) вносит почту в текущий Rmail-файл из его входных файлов. Если у этого Rmail-файла нет входных файлов, g ничего не делает. Команда M-x rmail также вносит новую почту в ваш первичный Rmail-файл.

Чтобы перенести почту из файла, не являющегося обычным входным почтовым ящиком, задайте ключу g числовой аргумент, как в C-u g. Тогда он считает имя файла и перенесет почту из него. Когда g используется с аргументом, файл входного почтового ящика ни в коем случае не удаляется и не изменяется. Поэтому это основной способ переноса одного файла сообщений в другой.

Копирование сообщений в файлы

Эти команды копируют сообщения из Rmail-файла в другой файл.

o файл RET
Добавить копию текущего сообщения в конец файла, по умолчанию в формате Rmail-файлов (rmail-output-to-rmail-file).
C-o файл RET
Добавить копию текущего сообщения в конец файла, по умолчанию в формате системных почтовых ящиков (rmail-output).
w файл RET
Вывести только тело сообщения в файл, по умолчанию имя файла берется из поля `Subject'.

Команды o и C-o копируют текущее сообщение в указанный файл. Это может быть Rmail-файл или файл в формате системных почтовых ящиков; команды вывода выясняют формат этого файла и записывают копируемое сообщение в этом формате.

При копировании сообщения в файл в формате Unix, эти команды включают все поля заголовков, которые видимы в данный момент. Если хотите, используйте сначала команду t, чтобы указать, какие заголовки показывать (и копировать).

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

Если к выходному Rmail-файлу в данный момент обращается какой-нибудь буфер, команды вывода копируют сообщение в этот буфер. Нужно ли действительно сохранять буфер в его файл решаете вы.

Иногда вы можете получить сообщение, чье тело несет содержимое файла. Вы можете сохранить его тело в файл (исключая заголовки сообщения) с помощью команды w (rmail-output-body-to-file). Часто эти сообщения содержат имя целевого файла в поле `Subject', поэтому команда w использует это поле как имя выходного файла по умолчанию. Однако, имя файла считывается из минибуфера, поэтому при желании вы можете указать другое имя.

Вы также можете вывести сообщение в Rmail-файл, выбранный из меню. Сначала выберите пункт меню Classify, из меню Classify выберите пункт Output Rmail File; затем выберите нужный вам пункт меню. Это выведет текущее сообщение в указанный файл, как команда o. Переменные rmail-secondary-file-directory и rmail-secondary-file-regexp указывают, какие файлы предлагает это меню: первая переменная говорит в каком каталоге их искать; вторая говорит, какие файлы в этом каталоге предлагать (все, чьи имена соответствуют регулярному выражению).

Копирование сообщения придает его исходной копии атрибут `filed', так что когда такое сообщение становится текущим, в строке режима появляется слово `filed'. Если вы хотите хранить только одну копию каждого почтового сообщения, установите переменную rmail-delete-after-output равной t; тогда команды o и C-o после копирования удаляют оригинал. (Впоследствии вы можете отменить удаление оригинального сообщения, если захотите.)

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

Переменная rmail-output-file-alist позволяет вам указать интеллектуальные значения по умолчанию для выходного файла, основанные на содержимом текущего сообщения. Её значением должен быть список, чьи элементы имеют такую форму:

(regexp . имя)

Если в текущем сообщении есть совпадение с regexp, то по умолчанию именем выходного файла будет имя. Если совпадения найдены для нескольких элементов, то имя файла по умолчанию определяется первым совпавшим элементом. Подвыражение имя может быть константной строкой, дающей имя файла, или, в более общем случае, любым лисповским выражением, возвращающим имя файла в виде строки. rmail-output-file-alist относится как к o, так и к C-o.

Метки

У каждого сообщения могут быть различные метки, приписываемые ему в качестве средства классификации. Метка имеет имя; разные имена означают разные метки. Любая данная метка либо присутствует, либо отсутствует в конкретном сообщении. Ряд имён меток имеют стандартные значения и присваиваются сообщениям в Rmail автоматически в нужный момент; такие специальные метки называются атрибутами.

Все другие метки приписываются пользователем.

a метка RET
Приписать метку текущему сообщению (rmail-add-label).
k метка RET
Удалить метку из текущего сообщения (rmail-kill-label).
C-M-n метки RET
Передвинуться на следующее сообщение, которое имеет одну из меток (rmail-next-labeled-message).
C-M-p метки RET
Передвинуться на предыдущее сообщение, которое имеет одну из меток (rmail-previous-labeled-message).
C-M-l метки RET
Cделать резюме всех сообщений, содержащих какую-либо из меток (rmail-summary-by-labels).

Команды a (rmail-add-label) и k (rmail-kill-label) позволяют вам приписывать или удалять любую метку из текущего сообщения. Если аргумент метка пустой, то это означает приписывание или удаление той самой метки, которая была приписана или удалена самой последней.

Как только вы присвоили сообщениям метки, чтобы классифицировать их так, как вам хочется, появляются два способа использования этих меток: в перемещении и в резюме.

Команда C-M-n метки RET (rmail-next-labeled-message) передвигает к следующему сообщению, которое имеет одну из меток. Аргумент метки -- это одно или несколько имён меток, разделенных запятыми. C-M-p (rmail-previous-labeled-message) -- аналогичная команда, но передвигает назад к предыдущим сообщениям. Числовой аргумент в этих командах работает как счетчик повторов.

Команда C-M-l метки RET (rmail-summary-by-labels) показывает резюме, содержащее только сообщения, имеющие по крайней мере одну из описанного набора меток. Аргумент метки -- это одно или более имён меток, разделенных запятыми. Смотрите раздел Резюме, для получения информации о резюме.

Если аргумент метки для C-M-n, C-M-p или C-M-l пустой, то это предполагает использование последнего набора меток, указанного для какой-либо из этих команд.

Атрибуты в Rmail

Некоторые метки, такие, как `deleted' и `filed', имеют встроенные значения и приписываются сообщениям или удаляются из них автоматически в соответствующее время; эти метки называются атрибутами. Ниже приводится список атрибутов Rmail.

`unseen'
Означает, что сообщение никогда не было текущим. Приписывается сообщениям, когда они поступают из файла входного почтового ящика, и удаляется, когда сообщение становится текущим. Когда вы запускаете Rmail, он изначально показывает первое сообщение с этим атрибутом.
`deleted'
Означает, что сообщение удаляется. Приписывается командами удаления и уничтожается командами отмены удаления (смотрите раздел Удаление сообщений).
`filed'
Означает, что сообщение было скопировано в какой-нибудь другой файл. Приписывается командами вывода файла (смотрите раздел Множество почтовых файлов).
`answered'
Означает, что вы послали ответ на это сообщение. Приписывается командой r (rmail-reply). Смотрите раздел Посылка ответов.
`forwarded'
Означает, что вы перенаправляли сообщение другим. Приписывается командой f (rmail-forward). Смотрите раздел Посылка ответов.
`edited'
Означает, что вы редактировали текст сообщения внутри Rmail. Смотрите раздел Редактирование внутри сообщения.
`resent'
Означает, что вы пересылали это сообщение. Приписывается командой M-x rmail-resend. Смотрите раздел Посылка ответов.

Все другие метки приписываются или удаляются только пользователем и не имеют стандартного смысла.

Посылка ответов

Rmail имеет ряд команд, которые используют режим Mail для посылки исходящей корреспонденции. Смотрите раздел Посылка почты, для справок по использованию режима Mail, включая некоторые средства, предназначенные для работы с Rmail. А в этом разделе описываются специальные команды Rmail для входа в режим Mail. Следует отметить, что обычные команды для посылки почты, C-x m и C-x 4 m, применимы в режиме Rmail и работают точно так же, как обычно.

m
Послать сообщение (rmail-mail).
c
Продолжить редактирование уже начатого выходного сообщения (rmail-continue).
r
Послать ответ на текущее сообщение Rmail (rmail-reply).
f
Перенаправить текущее сообщение другим пользователям (rmail-forward).
C-u f
Переслать сообщение другим пользователям (rmail-resend).
M-m
Попробовать послать отскочившее письмо ещё раз (rmail-retry-failure).

Самая распространенная причина посылки сообщения во время пребывания в Rmail -- это необходимость ответа на сообщение, которое вы читаете. Чтобы сделать это, наберите r (rmail-reply). Это вызовет появление буфера `*mail*' в другом окне, что очень похоже на C-x 4 m, но при этом заранее инициализируются поля заголовка `Subject', `To', `CC' и `In-reply-To', основываясь на сообщении, на которое формируется ответ. Полю `To' присваивается имя отправителя этого сообщения, а в поле `CC' помещаются имена всех остальных его получателей.

Вы можете предотвратить появление некоторых адресов в поле `CC', используя переменную rmail-dont-reply-to-names. Её значением должно быть регулярное выражение (в виде строки): все получатели, чьи адреса совпадают с этим регулярным выражением, будут исключены из поля `CC'. По умолчанию она соответствует вашему собственному имени и любому имени, начинающемуся с `info-'. (Эти имена исключаются, потому что есть соглашение об использовании их для больших списков рассылки для широкой публикации анонсов.)

Чтобы полностью опустить поле `CC' в каком-то ответе, введите команду ответа с числовым аргументом: C-u r или 1 r.

После того, как буфер `*mail*' проинициализирован, редактирование и отправка почты идет как обычно (смотрите раздел Посылка почты). Если с вашей точки зрения ранее подготовленные поля заголовка неправильны, то их можно отредактировать. Вы также можете использовать команды режима Mail (смотрите раздел Режим Mail), включая C-c C-y, которая вставляет сообщение, на которое вы отвечаете. Вы можете вернуться в буфер Rmail, выбрать там другое сообщение, переключиться назад и вставить новое текущее сообщение.

Иногда сообщения не доходят по назначению. Почтовые программы обычно возвращают вам это письмо, заключив его в сообщение об отказе. Команда Rmail M-m (rmail-retry-failure) подготавливает этого же сообщение к повторной посылке: она создаёт буфер `*mail*' с тем же телом и полями заголовка, какие были раньше. Если вы сразу нажмете C-c C-c, вы пошлете сообщение точно таким же, каким оно было в первый раз. Иначе, вы можете отредактировать его текст или заголовки и затем отправить. Переменная rmail-retry-ignored-headers, в том же формате, что и rmail-ignored-headers (смотрите раздел Отображение сообщений), контролирует, какие заголовки будут удалены из сообщения об отказе при попытке повторной отправки; по умолчанию она равна nil.

Еще одна достаточно частая причина отправки почты в Rmail заключается в необходимости перенаправить текущее сообщение другим пользователям. Команда f (rmail-forward) облегчает это, заранее инициализируя буфер `*mail*' текстом текущего сообщения и указывая в поле `Subject', что это перенаправленное письмо. От вас требуется только записать получателей и отправить. Когда вы перенаправляете сообщение, адресаты получают его "от вас", а его содержимым является оригинальное сообщение.

Перенаправленное сообщение заключается между двумя разделительными строками. Кроме этого, все строки в нем, начинающиеся с дефисов, изменяются добавлением `- ' в начало. Когда вы получаете перенаправленное сообщение, если оно содержит что-то кроме обычного текста -- исходный код программы, например -- вы можете счесть удобным проделать обратное преобразование. Вы можете сделать это, выбрав перенаправленное сообщение и напечатав M-x unforward-rmail-message. Эта команда извлекает оригинальное сообщение, удаляя вставленные строки `- ', и вставляет его в Rmail-файл как отдельное сообщение сразу после текущего.

Пересылка -- это вариант, похожий на перенаправление; разница в том, что при пересылке письмо отправляется "от начального посылателя", таким же, каким оно пришло к вам, но с добавлением полей заголовка `Resent-from' и `Resent-to', чтобы обозначить, что оно исходит от вас. Чтобы переслать сообщение в Rmail, используйте C-u f. (f запускает rmail-forward, которая запрограммирована так, чтобы вызывать rmail-resend, если вы задали числовой аргумент.)

Команда m (rmail-mail) используется для начала редактирования исходящего сообщения, которое не является ответом. Она оставляет поля заголовка пустыми. Единственное отличие её от C-x 4 m состоит в том, что она обеспечивает доступность буфера Rmail для C-c C-y, так же, как это делает r. Таким образом, m может быть использована для отправки ответа на сообщение или для перенаправления; она может делать все, что делают команды r и f.

Команда c (rmail-continue) возобновляет редактирование буфера `*mail*', чтобы вы могли завершить сообщение, которое уже составляли, а также для изменения сообщения, которое вы отправили.

Если вы установите переменную rmail-mail-new-frame в значение, не равное nil, то все команды Rmail для начала отправки сообщения будут создавать для его редактирования новый фрейм. Этот фрейм удаляется, когда вы отсылаете сообщение, или когда вы используете пункт `Don't Send' в меню `Mail'.

Все команды Rmail для отправки сообщения используют тот метод составления, который вы выбрали (смотрите раздел Способы составления сообщений).

Резюме

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

Каждый буфер резюме относится только к одному Rmail-файлу; если редактируется множество Rmail-файлов, то они имеют отдельные буферы резюме. Имя буфера резюме создаётся добавлением `-summary' в конец имени буфера Rmail. Как правило, в один и тот же момент показывается только один буфер резюме.

Создание резюме

Ниже приводятся команды для создания резюме для текущего Rmail-файла. Если Rmail-файл имеет буфер резюме, изменения в этом файле (такие как удаление или вычеркивание сообщений и получение новой почты) автоматически обновляют резюме.

h
C-M-h
Создает резюме всех сообщений (rmail-summary).
l метки RET
C-M-l метки RET
Создает резюме сообщений, которые имеют одну или несколько указанных меток (rmail-summary-by-labels).
C-M-r получатели RET
Создает резюме сообщений, отправленных одному или нескольким из указанных получателей (rmail-summary-by-recipients).
C-M-t тема RET
Создает резюме сообщений, которые имеют совпадение с регулярным выражением тема в полях заголовка `Subject' (rmail-summary-by-topic).

Команда h или C-M-h (rmail-summary) заполняет буфер резюме для текущего Rmail-файла перечнем всех сообщений из этого файла. Потом она показывает и выбирает этот буфер резюме в другом окне.

C-M-l метки RET (rmail-summary-by-labels) делает частичное резюме, упоминающее только сообщения, которые имеют одну или несколько меток. Метки должны содержать имена меток, разделенные запятыми.

C-M-r получатели RET (rmail-summary-by-recipients) делает частичное резюме, упоминающее только сообщения, которые имеют одного или нескольких получателей. Аргумент получатели должен содержать почтовые адреса, разделенные запятыми.

C-M-t тема RET (rmail-summary-by-topic) создает частичное резюме, упоминающее только сообщения, чьи поля `Subject' имеют совпадения с регулярным выражением тема.

Следует отметить, что для любого Rmail-файла существует только один буфер резюме; создание резюме одного вида отменяет любое ранее сделанное резюме.

Переменная rmail-summary-window-size говорит, сколько строк должно использовать окно резюме. Переменная rmail-summary-line-count-flag указывает, должны ли строки резюме содержать число, показывающее количество строк в сообщении.

Редактирование резюме

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

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

Почти все команды Rmail работают и в буфере резюме, также как и в буфере Rmail. А именно, d в буфере резюме удаляет текущее сообщение, u отменяет удаление, а x вычеркивает. o и C-o выводят текущее сообщение в файл; r позволяет написать ответ. Вы можете прокручивать текущее сообщение, оставаясь в буфере резюме, с помощью SPC и DEL.

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

n
Перейти к следующей строке, пропуская удалённые, и выбрать её сообщение.
p
Перейти к предыдущей строке, пропуская удалённые, и выбрать её сообщение.
M-n
Перейти к следующей строке и выбрать её сообщение.
M-p
Перейти к предыдущей строке и выбрать её сообщение.
>
Перейти к последней строке и выбрать её сообщение.
<
Перейти к первой строке и выбрать её сообщение.
M-s образец RET
Производит поиск образца в сообщениях начиная с текущего; выбирает найденное сообщение и перемещает точку в буфере резюме к его строке.

Удаление, отмена удаления, получение новой почты и даже выбор другого сообщения -- все обновляют буфер резюме, когда вы делаете эти операции в буфере Rmail. Если переменная rmail-redisplay-summary не равна nil, эти действия также возвращают буфер резюме на экран.

Когда вы завершили использование резюме, наберите Q (rmail-summary-wipe), чтобы удалить окно буфера резюме. Вы также можете выйти из Rmail, находясь в буфере резюме: q (rmail-summary-quit) удаляет окно резюме, а затем выходит из Rmail, записывая Rmail-файл и переключая в другой буфер.

Сортировка Rmail-файла

M-x rmail-sort-by-date
Сортирует сообщения текущего Rmail-файла по дате.
M-x rmail-sort-by-subject
Сортирует сообщения текущего Rmail-файла по теме.
M-x rmail-sort-by-author
Сортирует сообщения текущего Rmail-файла по имени автора.
M-x rmail-sort-by-recipient
Сортирует сообщения текущего Rmail-файла по именам получателей.
M-x rmail-sort-by-correspondent
Сортирует сообщения текущего Rmail-файла по имени другого корреспондента.
M-x rmail-sort-by-lines
Сортирует сообщения текущего Rmail-файла по размеру (числу строк).
M-x rmail-sort-by-keywords RET метки RET
Сортирует сообщения текущего Rmail-файла по меткам. Аргумент метки должен быть списком меток, разделенных запятыми. Порядок этих меток определяет порядок сообщений; сообщения с первой меткой идут первыми, сообщения со второй меткой идут вторыми, и так далее. Сообщения, не имеющие ни одну из этих меток, идут последними.

Команды Rmail для сортировки производят устойчивую сортировку: если нет причины предпочитать одно из двух сообщений, их порядок не изменяется. Вы можете использовать это для сортировки по нескольким критериям. Например, если вы применили rmail-sort-by-date и затем rmail-sort-by-author, сообщения от одного автора появятся в порядке возрастания даты.

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

Отображение сообщений

Rmail переформатирует заголовок каждого сообщения перед его показом. При этом удаляются неинтересные поля заголовков, чтобы уменьшить беспорядок. Чтобы посмотреть заголовок целиком или повторить операцию переформатирования, вы можете использовать команду t (rmail-toggle-headers).

t
Включает или выключает показ полного заголовка (rmail-toggle-header).

При переформатировании удаляются большинство полей заголовка, поскольку они не представляют интереса. Переменная rmail-ignored-headers содержит регулярное выражение, указывающее какие поля надо скрывать таким способом -- если оно соответствует началу поля, то это поле скрывается.

Rmail сохраняет полные исходные заголовки перед переформатированием; чтобы посмотреть их, используйте команду t (rmail-toggle-headers). Она сбрасывает переформатированные заголовки текущего сообщения и показывает его с исходными заголовками. Повтор команды t снова переформатирует сообщение. Повторный выбор сообщения тоже приводит к переформатированию.

Одно из последствий этого состоит в том, что если вы редактировали переформатированный заголовок (с помощью e; смотрите раздел Редактирование внутри сообщения), последующее использование t сбросит ваши изменения. С другой стороны, если вы использовали e после t, чтобы редактировать первоначальный (не переформатированный) заголовок, эти изменения останутся.

Когда команде t дан префиксный аргумент, положительный аргумент обозначает показ переформатированного заголовка, а нулевой или отрицательный -- полного.

При использовании в оконной системе, которая поддерживает несколько шрифтов, Rmail подсвечивает некоторые поля заголовка, которые особенно интересны -- по умолчанию это поля `From' и `Subject'. Переменная rmail-highlighted-headers хранит регулярное выражение, задающее поля заголовка, которые нужно подсвечивать; если оно соответствует началу поля, все это поле подсвечивается.

Если вы зададите необычные цвета для текста и фона, то цвета, используемые для подсветки, могут с ними плохо смотреться. В таком случае задайте другие цвета для начертания highlight. Это стоит сделать, потому что начертание highlight используется и других видах выделения. Смотрите раздел Использование разных начертаний, чтобы узнать, как это сделать.

Чтобы полностью выключить подсветку в Rmail, установите rmail-highlighted-headers равной nil.

Редактирование внутри сообщения

Большинство обычных команд Emacs доступны в режиме Rmail, хотя некоторые, такие как C-M-n и C-M-h, переопределяются в Rmail для других целей. Однако обычно буфер Rmail предназначен только для чтения, и большинство букв переопределены как команды Rmail. Если вы хотите отредактировать текст сообщения, вы должны использовать команду Rmail e.

e
Редактировать текущее сообщение как обычный текст.

Команда e (rmail-edit-current-message) переключает из режима Rmail в режим Rmail Edit, другой основной режим, практически эквивалентный режиму Text. Это изменение отображается в строке режима.

В режиме Rmail Edit буквы вставляют себя как обычно, а команды Rmail недоступны. Когда вы закончите редактирование сообщения и будете готовы вернуться в Rmail, наберите команду C-c C-c, которая переключит вас назад в режим Rmail. С другой стороны, можно вернуться в режим Rmail, но отменить все сделанные изменения, набрав C-c C-].

Вход в режим Rmail Edit вызывает ловушку text-mode-hook, а затем ловушку rmail-edit-mode-hook (смотрите раздел Ловушки). При этом в сообщению присваивается атрибут `edited'. Она также показывает полный заголовок сообщения, так что вы можете редактировать как тело, так и заголовки сообщения, и ваши изменения в заголовках останутся навсегда.

Сообщения-дайджесты

Сообщение-дайджест -- это сообщение, которое создано для передачи нескольких других сообщений. Дайджесты используются в некоторых списках рассылки с ведущим; все сообщения, которые пришли для рассылки в течение какого-то периода времени, например одного дня, помещаются в единый дайджест, который затем рассылается подписчикам. Пересылка одного такого дайджеста занимает гораздо меньше машинного времени, чем пересылка отдельных сообщений, хоть и при одинаковом общем объеме, поскольку затраты ресурсов на одно сообщение при передаче почты по сети довольно значительны.

При получении сообщения-дайджеста наиболее удобным способом для его прочтения является разброшюровка: обратное разделение его на несколько отдельных сообщений. После этого можно читать и удалять отдельные сообщения как вам угодно.

Чтобы сделать это, необходимо выбрать сообщение-дайджест и затем набрать команду M-x undigestify-rmail-message. Она извлекает каждое подсообщение как отдельное сообщение Rmail и вставляет их вслед за дайджестом. Само сообщение-дайджест помечается как удалённое.

Преобразование Rmail-файла в системный формат

Команда M-x unrmail преобразует файл в формате Rmail в формат входных почтовых ящиков (также известный как системный почтовый формат), чтобы вы могли использовать его с другими программами для редактирования почты. Вы должны указать два аргумента, имя Rmail-файла и имя для преобразованного файла. M-x unrmail не изменяет сам Rmail-файл.

Чтение сообщений в Rot13

Сообщения из списков рассылки, которые могут оскорбить некоторых читателей, иногда кодируются простым методом, называемым rot13 --- потому что он сдвигает алфавит на 13 букв. Этот код служит не для секретности, он не предоставляет её; скорее, он позволяет тем, кто может быть оскорблён, избежать возможности даже увидеть настоящий текст сообщения.

Чтобы просмотреть буфер, использующий код rot13, запустите команду M-x rot13-other-window. Она показывает текущий буфер в другом окне, применяя код при отображении текста.

movemail и POP

При получении новой почты Rmail сначала копирует её из входного файла в Rmail-файл; затем он записывает Rmail-файл; затем усекает входной файл. Таким образом, сбой в системе может вызвать дублирование почты во входном файле и в Rmail-файле, но не может вызвать потери. Если rmail-preserve-inbox не равна nil, то Rmail будет копировать новую почту из входного файла в Rmail-файл, не усекая входной файл. Вы можете сделать такую установку, например, на портативном компьютере, который вы используете для проверки почты через POP во время путешествий, чтобы ваша почта оставалась на сервере, и вы могли сохранить её позднее на своей рабочей станции.

В некоторых случаях Rmail копирует новую почту из входного файла не прямым путем. Сначала он запускает программу movemail, чтобы переместить почту из входного файла в промежуточный файл, называемый `~/.newmail-входной-файл'. Затем Rmail вносит новую почту из этого файла, сохраняет Rmail-файл и только затем удаляет промежуточный файл. Если в неподходящий момент случится фатальный сбой, этот файл останется на месте, и Rmail будет использовать его в следующий раз при получении новой почты из этого входного файла.

Если Rmail по какой-то причине не может преобразовать данные из файла `~/.newmail-входной-файл' в формат Babyl, он переименовывает этот файл в `~/RMAILOSE.n' (n -- это целое число, выбранное так, чтобы оно было уникальным), так что Rmail не будет иметь проблем с этими данными снова. Вам стоит просмотреть этот файл, найти сообщение, которое сбивает с толку Rmail (вероятно, оно содержит знак control-подчерк, восьмеричный код 037), и удалить его. Тогда вы можете использовать 1 g, чтобы получить почту из исправленного файла.

Некоторые системы используют для доступа к данным почтовых ящиков пользователей метод, называемый POP, вместо записи этих данных в почтовые файлы. movemail может работать с POP, если вы скомпилировали её с определённым макросом MAIL_USE_POP. (Вы можете получить это, задав ключ `--with-pop', когда запускаете configure во время установки Emacs.) movemail работает только с POP3, но не с более ранними версиями POP.

В предположении, что вы правильно скомпилировали и установили movemail, вы можете указать входной почтовый ящик POP, написав "имя файла" в форме `po:имя-пользователя' в списке входных почтовых ящиков Rmail-файла. movemail обрабатывает такие имена путем установки соединения с POP-сервером. Переменная среды `MAILHOST' задаёт машину, на которой будет производиться поиск сервера.

Для доступа к почте через POP может потребоваться пароль. Если переменная rmail-pop-password отлична от nil, то она задаёт пароль для использования с POP. Иначе, если rmail-pop-password-required не равна nil, то Rmail спрашивает пароль у вас.

Если вам нужно передать movemail дополнительные флаги командной строки, установите переменную rmail-movemail-flags равной списку желаемых флагов. Не используйте эту переменную для передачи флага -p, который предотвращает затирание содержимого входного файла; пользуйтесь вместо этого переменной rmail-preserve-inbox.

Установленная в вашей системе программа movemail может поддерживать аутенфикацию Kerberos. Если она поддерживается, то это будет использоваться по умолчанию всегда, когда вы будете пытаться получить почту через POP при неустановленных rmail-pop-password и rmail-pop-password-required.

Некоторые POP-серверы хранят сообщения в обратном порядке. Если ваш сервер делает так, а вам хотелось бы читать почту в том порядке, в каком она поступала, вы можете велеть movemail перевернуть очередность загружаемых сообщений, добавив к rmail-movemail-flags флаг -r.

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024