GNUEmacsManual:30

From 흡혈양파의 번역工房
Jump to: navigation, search
Rmail 을 이용해 메일 읽기(Reading Mail with Rmail)

Rmail 을 이용해 메일 읽기(Reading Mail with Rmail)

Rmail 은 사용자가 수신하는 메일을 읽고 삭제하는 Emacs 하위시스템이다. Rmail 은 Rmail 파일에 메일 메시지를 보관한다. Rmail 파일에서 메시지를 읽는 작업은 특수 주 모드인 Rmail 모드에서 실행되는데, 해당 모드는 메일을 관리하는 명령어를 실행하는 문자를 대부분 재정의한다.

Rmail의 기본 개념(Basic Concepts of Rmail)

가장 단순한 방식으로 Rmail 사용하면 모든 메일이 저장되는 Rmail 파일,
~/RMAIL
을 갖게 된다. 이것을 1차 Rmail 파일(primary Rmail file)이라고 부른다. M-x rmail 명령어는 1차 Rmail 파일을 읽고 인박스(inbox)로부터 새로운 메일을 합친 후 사용자가 읽지 않은 첫 번째 메시지를 표시하여 읽도록 해준다.
rmail-file-name
변수는 1차 Rmail 파일의 이름을 명시한다.


Rmail 은 Rmail 파일에서 한 번에 하나의 메시지만 표시한다. 표시된 메시지를 현재 메시지라고 부른다. Rmail 모드의 특수 명령어들은 현재 메시지 삭제하기, 현재 메시지를 다른 파일로 복사하기, 답장하기, 다른 메시지로 이동하기 등의 작업을 실행할 수 있다.


Rmail 파일에서는 보통 메시지의 수신 날짜순으로 정렬되지만 다른 방식으로 정렬할 수도 있다(372 페이지의 30.12절 [Rmail 정렬(Rmail Sorting)] 참고). 메시지는 메시지 번호에 해당하는 연속된 정수로 식별된다. 현재 메시지의 개수와 파일 내 메시지 총 개수는 모드 라인에 표시된다. j 키를 이용해 메시지 번호를 명시하면 해당 메시지로 이동 가능하다(360 페이지의 30.3절 [Rmail 움직임(Rmail Motion)] 참고).


일반적인 Emacs 규칙에 따라 Rmail 파일에 일어나는 변경 사항은 사용자가 파일을 저장할 때에만 영구적으로 적용된다. 파일은 s (
rmail-expunge-and-save
)를 이용해 저장하는데, 우선 파일에서 삭제된 메시지를 휴지통에서 삭제(expunge)한다(361 페이지의 30.4절 [Rmail 삭제(Deleting Messages)] 참고). 휴지통에서 삭제(expunging)하지 않고 파일을 저장하려면 C-x C-s 를 사용한다. Rmail 은 인박스로부터 새로운 메일을 합친 후에도 Rmail 파일을 저장한다(362 페이지의 30.5절 [Rmail 인박스(Rmail Inbox)] 참고).


Rmail 은 q (
rmail-quit
) 를 이용해 종료되는데, 이는 Rmail 파일을 휴지통 삭제(expunge)한 후 저장하고, Rmail 버퍼와 서머리 버퍼를 bury한다(369 페이지의 30.11절 [Rmail 서머리(Rmail Summary)] 참고). 그렇지만 형식적으로 "종료(exit)"할 필요는 없다. Rmail에서 다른 버퍼 내 편집으로 전환 후 다시 Rmail로 전환하지 않으면 종료된 것이다. 단 Rmail을 저장해야 한다는 사실은 잊지 말라(내용이 변경된 여느 파일과 마찬가지로 말이다). 이때 저장에는 C-x s 를 이용하는 것이 적절하다(126 페이지의 15.3.1절 [저장 명령어(Save Commands)] 참고). Rmail 명령어인 b,
rmail-bury
는 휴지통을 삭제하거나 Rmail 파일을 저장하지 않고 Rmail 버퍼와 서머리를 bury한다.


메시지 내에서 스크롤하기(Scrolling Within a Message)

Rmail 이 화면에 차지 않는 메시지를 표시하면 메시지를 스크롤해야 나머지 내용을 읽을 수 있다. 이때 C-v, M-v, M-< 를 이용할 수 있지만 Rmail 스크롤은 자주 사용되므로 더 단순해야 한다.


SPC
순방향으로 스크롤한다(
scroll-up-command
).


DEL
S-SPC
역방향으로 스크롤한다(
scroll-down-command
).


.
메시지의 시작으로 스크롤한다(
rmail-beginning-of-message
).


/
메시지의 끝으로 스크롤한다(
rmail-end-of-message
).


메시지를 읽을 때는 한 화면을 스크롤하는 경우가 가장 흔하기 때문에 Rmail 은 SPCDEL (또는 S-SPC)을 각각 C-v (
scroll-up-command
), M-v (
scroll-down-command
) 와 동일하게 만든다.


. (
rmail-beginning-of-message
) 명령어는 선택된 메시지의 시작으로 다시 스크롤한다. 이것은 마크를 설정하지 않고, 사용자가 현재 메시지의 버퍼 경계를 변경하면 그러한 경계를 리셋한다는 점에서 M-<: 과 다르다. 마찬가지로 / (
rmail-end-of-message
)는 선택된 메시지의 끝까지 순방향으로 스크롤한다.


메시지들 사이로 이동하기(Moving Among Messages)

메시지로 할 수 있는 가장 기본적인 동작은 바로 읽는 것이다. Rmail에서 메시지를 읽기 위해서는 우선 현재 메시지로 만들어야 한다. 메시지는 수신 날짜순으로 정렬되어 있기 때문에 파일을 순차적으로 이동하는 방법이 주로 사용된다. Rmail로 들어가면 사용자는 아직 현재 메시지로 만들어지지 않은 첫 번째 메시지에 위치하게 된다('
unseen
' 속성을 가진 첫 메시지를 의미; 366 페이지의 30.9절의 [Rmail 속성(Rmail Attributes)] 참고). 다른 새 메시지를 확인하려면 순방향으로 이동하고, 오래된 메시지를 다시 확인하려면 역방향으로 이동한다.


n
삭제되지 않은 다음 메시지로 이동하고, 방해되는 삭제된 메시지는 모두 건너뛴다 (
rmail-next-undeleted-message
).


p
삭제되지 않은 이전 메시지로 이동한다(
rmail-previous-undeleted-message
).


M-n
삭제된 메시지를 포함시켜 다음 메시지로 이동한다(
rmail-next-message
).


M-p
삭제된 메시지를 포함시켜 이전 메시지로 이동한다(
rmail-previous-message
).


C-c C-n
현재 메시지와 제목이 동일한 다음 메시지로 이동한다(
rmail-next-same-subject
).


C-c C-p
현재 메시지와 제목이 동일한 이전 메시지로 이동한다(
rmail-previous-same-subject
).


j
첫 번째 메시지로 이동한다. 인자 n을 이용해 메시지 번호 n으로 이동한다(
rmail-show-message
).


>
마지막 메시지로 이동한다(
rmail-last-message
).


<
처음 메시지로 이동한다(
rmail-first-message
).


M-s regexp RET
regexp에 대한 일치 결과를 포함하는 다음 메시지로 이동한다(
rmail-search
).


-M-s regexp RET
regexp에 대한 일치 결과를 포함하는 이전 메시지로 이동한다


np 는 Rmail 에서 메시지들 사이를 이동하는 데에 일반적으로 사용되는 명령어다. 이들은 메시지들을 순차적으로 이동하지만 삭제된 메시지는 건너뛰므로 유용할 것이다. 이 명령어들의 정의는
rmail-next-undeleted-message
rmail-previous-undeleted-message
로 명명된다. 삭제된 메시지로 이동하여 복구시키는 경우를 대비해 삭제된 메시지를 건너뛰지 않도록 설정하고 싶다면 M-nM-p (
rmail-next-message
rmail-previous-message
) 변형을 이용한다. 이러한 명령어에 수치적 인자를 제공하면 반복 계수의 역할을 한다.


Rmail 에서는 단순히 숫자를 입력하면 수치적 인자를 명시할 수 있다. 따라서 먼저 C-u 를 입력할 필요가 없다.


M-s (
rmail-search
) 명령어는 Rmail 고유의 검색 명령어다. 일반적인 증분 검색 명령어인 C-s 도 Rmail 에서 작동하지만 현재 메시지 내에서만 검색을 실행한다. M-s 는 다른 메시지에서 검색을 실행하는 것을 목적으로 한다. 정규 표현식을 (97 페이지의 12.6절 [Regexps] 참고) 비증분식으로 읽고, 뒤에 따라오는 메시지의 시작 부분부터 일치 결과를 검색한다. 그리고 해당하는 메시지를 선택한다. regexp 가 비어 있을 경우 M-s 명령어를 사용하면 이전에 사용한 regexp 를 재사용한다.


파일에서 다른 메시지를 역방향으로 검색하려면 M-s 에 음의 인자를 제공하라. Rmail에서는 - M-s 를 이용하면 된다. 이는 이전 메시지의 끝에서부터 검색을 시작한다.


라벨을 기준으로 메시지를 검색하는 것도 가능하다. 365 페이지의 30.8절 [Rmail 라벨(Rmail Labels)]을 참고한다.


C-c C-n (
rmail-next-same-subject
) 명령어는 현재 메시지와 제목이 동일한 다음 메시지로 이동한다. 접두 인자는 반복 계수의 역할을 한다. 인자가 음수일 경우 명령어는 역방향으로 이동하므로 C-c C-p (
rmail-previous-same-subject
) 와 같이 행동한다. 제목을 비교할 때 이러한 명령어들은 답장 제목에 주로 추가되는 접두어를 무시한다.


절대 메시지 번호로 명시된 메시지로 이동하기 위해서는 메시지 번호를 인자로 하여 j (
rmail-show-message
) 를 사용한다. 인자를 명시하지 않으면 j 는 첫 번째 메시지를 선택한다. < (
rmail-first-message
) 역시 첫 번째 메시지를 선택한다. > (
rmail-last-message
) 는 마지막 메시지를 선택한다.


메시지 삭제하기(Deleting Messages)

더 이상 메시지를 보관할 필요가 없다면 삭제한다. 이로 인해 메시지를 무시해도 좋다고 flag 되고, 일부 Rmail 명령어들은 이 메시지가 더 이상 존재하지 않는 것처럼 행동하기도 하는데, 사실은 Rmail 파일에 여전히 위치하고 메시지 번호도 갖고 있다.


Rmail 파일을 휴지통 삭제(expunging)하면 삭제된 메시지를 실제로 제거한다. 그리고 나머지 메시지에 다시 번호가 매겨진다.


d
현재 메시지를 삭제하고, 삭제되지 않은 다음 메시지로 이동한다(
rmail-delete-forward
).


C-d
현재 메시지를 삭제하고, 삭제되지 않은 이전 메시지로 이동한다(
rmail-delete-backward
).


u
현재 메시지를 삭제 취소(undelete)하거나 삭제된 이전 메시지로 되돌아가 삭제 취소한다(
rmail-undelete-previous-message
).


x
Rmail 파일의 휴지통을 삭제한다(
rmail-expunge
).


메시지를 삭제하는 Rmail 명령어에는 두 가지가 있다. 두 가지 모두 현재 메시지를 삭제하고 다른 메시지를 선택한다. d (
rmail-delete-forward
)는 뒤에 따라오는 메시지로 이동하고 이미 삭제된 메시지는 건너뛰는 반면 C-d (
rmail-delete-backward
) 는 삭제되지 않은 이전 메시지로 이동한다. 명시된 방향에 삭제되지 않은 메시지가 존재하지 않으면 방금 삭제한 메시지가 현재 메시지가 된다. 접두 인자를 이용한 d 명령어는 C-d 와 동일하다. 이러한 명령어들의 Rmail 서머리(summary) 버전은 약간 다르게 작동함을 주목한다(370 페이지의 30.11.2절 [Rmail 서머리 편집(Rmail Summary Edit)] 참고).


Rmail 은 메시지를 삭제할 때마다
rmail-delete-message-hook
훅을 실행한다. 훅 함수가 호출되면 메시지가 삭제된 것으로 마크되지만 여전히 Rmail 버퍼에서는 현재 메시지에 해당한다.


삭제된 메시지를 모두 Rmail 파일에서 사라지게 만들고 싶다면 x (
rmail-expunge
)를 입력한다. 이를 실행하기 전에는 아직도 삭제된 메시지를 삭제 취소할 수 있다. 삭제 취소 명령어인 u (
rmail-undelete-previous-message
)는 대부분의 경우 d 명령어의 효과를 취소하도록 설계되었다. 그 외의 경우 이 명령어는 삭제된 메시지가 발견될 때까지 이전 메시지로 역방향 이동하여 삭제 취소한다.


ud 가 삭제한 메시지로 돌아가서 삭제 취소를 하므로 u 를 이용해 d 의 실행을 취소할 수 있다. 하지만 d 가 만일 삭제 중인 메시지 뒤에 이미 삭제된 메시지를 여러 개 건너뛴다면 u 명령어는 건너뛴 마지막 메시지를 삭제 취소할 것이기 때문에 앞에서 설명한 동작을 실행할 수 없다. 이러한 문제를 깔끔하게 해결할 방법은 없다. 하지만 u 명령어를 반복하면 결국은 삭제를 취소하려는 메시지로 돌아갈 수 있을 것이다. M-p 명령어를 이용해 삭제된 특정 메시지를 선택한 후 u 를 입력하여 삭제 취소하는 방법도 있다.


삭제된 메시지에는 '
deleted
' 속성이 있어서 현재 메시지가 삭제되면 모드 라인에 '
delete
' 가 표시된다. 사실 메시지를 삭제하고 삭제 취소하는 일은 이 속성을 추가하고 제거하는 일과 다르지 않다. 366 페이지의 30.9절 [Rmail 속성(Rmail Attributes)]을 참고한다.


Rmail 파일과 인박스(Files and Inboxes)

로컬로 메일을 수신하면 운영체제는 수신하는 메일을 인박스(inbox)라고 부르는 파일에 위치시킨다. Rmail 을 시작하면
movemail
이라는 C 프로그램을 실행시켜 로컬 인박스의 새 메시지를 1차 Rmail 파일로 복사하는데, 이 파일에는 이전 Rmail 세션에서 저장한 메시지가 이미 포함되어 있다. 사실상 사용자는 이 파일에서 Rmail 을 이용해 메일을 읽는 것이다. 이러한 연산을 '새 메일을 수신한다'고 부른다. Rmail 에서는 언제든 g 를 입력해서 새 메일을 수신할 수 있다.


rmail-primary-inbox-list
변수는 사용자의 1차 Rmail 파일에 대한 인박스에 해당하는 파일 목록을 포함한다. 이 변수를 직접 설정하지 않으면 Rmail 은
MAIL
환경 변수 또는 최후의 수단으로
rmail-spool-directory
를 기준으로 하는 기본 인박스를 사용한다. 기본 인박스 파일은 운영체제마다 다르지만 주로
/var/mail/username
,
/var/spool/mail/username
,
/usr/spool/mail/username
중에 하나다.


set-rmail-inbox-list
명령어를 이용하면 현재 세션의 Rmail 파일에 대한 인박스 파일을 명시할 수 있는데, 363 페이지의 관련 내용은 30.6절 [Rmail 파일(Rmail File)]을 참고한다.


Rmail 파일과 인박스를 구분하는 이유는 두 가지가 있다.

  1. 인박스 파일 포맷은 운영체제와 사용 중인 다른 메일 소프트웨어에 따라 다르다. Rmail 의 한 부분만이 대안(alternatives)에 대해 알 필요가 있으며, 모든 대안을 Rmail 고유의 포맷으로 변환하는 방법만 이해하면 된다.
  2. 메일 전달을 인터로킹(interlock)해얗 한다는 의무 때문에 메일을 손실할 위험 없이 인박스 파일에 접근하기란 매우 복잡하다. 또한 운영체제마다 다른 인터로킹(interlocking) 기법을 사용한다. Rmail만 Rmail 파일에 작업하기 때문에 인박스에서 최종적으로 메일을 구분된 Rmail 파일로 이동시키면 나머지 Rmail을 인터로킹할 필요가 없어진다.


Rmail 은 본래 Babyl 포맷을 내부 포맷으로 이용하여 쓰여졌다. 이후 우리는 Unix 와 GNU 시스템의 일반적인 인박스 포맷('
mbox
')이 작업에 적합하다고 판단했고 그에 따라 Emacs 23 버전부터는 그것을 Rmail 의 내부 포맷으로 사용해왔다. 포맷은 동일하지만 Rmail 파일은 여전히 인박스 파일과 구분되어 있다. (사실 약간 다른 mbox 포맷들이 몇 가지 있다. 차이가 매우 중요하지는 않지만 시스템이 사용하는 형태를 Rmail 에게 알려주고 싶다면
rmail-mbox-format
변수를 설정할 수 있다. 상세한 내용은 변수와 관련된 문서를 참고한다.)


Rmail 은 새 메일을 수신할 때 먼저 인박스 파일의 새 메일을 Rmail 파일로 복사하고 Rmail 파일을 저장한 후 인박스 파일을 비운다. 이 방식을 이용하면 시스템 충돌 시 인박스와 Rmail 파일 간에 메일 중복을 야기할 수는 있으나 메일이 손실될 가능성은 없다.
rmail-preserve-inbox
nil
값이 아닌 경우 Rmail 은 새 메일을 수신할 때 인박스 파일을 비우지 않는다. 가령 여행 중에 POP 를 통해 메일을 확인하는 이동식 컴퓨터에 이를 설정하면 메일이 서버에 남아 있으므로 후에 워크스테이션으로 저장할 수 있게 된다.


일부 사례에서는 Rmail 이 인박스 파일로부터 간접적으로 새 메일을 복사한다. 먼저
movemail
프로그램을 실행하여 인박스의 메일을 Rmail 파일과 동일한 디렉터리에 위치한
.newmail-inboxname
이라는 중개 파일(intermediate file)로 이동시킨다. 이어 Rmail은 해당 파일에서 새 메일을 합쳐 Rmail 파일을 저장하는데, 저장이 완료되면 중개 파일을 삭제한다. 올바르지 않은 시기에 충돌이 발생하면 이 파일은 계속 존재하며, Rmail 은 해당 인박스에서 새 메일을 수신할 때 파일을 다시 사용할 것이다.


Rmail 이
.newmail-inboxname
의 데이터를 mbox 포맷으로 변환할 수 없을 경우 데이터를 처리하면서 다시 문제가 발생하지 않도록 파일명을
RMAILOSE.n
으로 (n 은 유일한 이름을 위해 선택된 정수) 재명명한다. 파일을 살펴보고 Rmail을 혼동시키는 메시지가 무엇인지 찾아서 (control-underscore 문자, 8진 코드 037을 포함하는 메시지를 주의) 삭제한다. 이제 1 g 를 이용하면 수정된 파일에서 새 메일을 수신할 수 있다.


다중 Rmail 파일(Multiple Rmail Files)

Rmail 은 기본적으로
~/RMAIL
이라고 명명된 사용자의 1차 Rmail 파일에서 작업하고, 사용자의 시스템 인박스 파일로부터 들어오는 메일을 수신한다. 하지만 다른 Rmail 파일을 Rmail 을 이용해 편집할 수도 있다. 이러한 파일들이 고유의 인박스를 통해 메일을 수신할 수도 있고, 사용자가 Rmail 명령어를 직접 사용하여 메시지를 그곳으로 이동할 수도 있다(364 페이지의 30.7절 [Rmail 출력(Rmail Output)] 참고).


i file RET
file 을 Emacs로 읽어와 Rmail을 실행한다(
rmail-input
).


M-x set-rmail-inbox-list RET files RET
메일을 가져올 현재 Rmail 파일의 인박스 파일명을 명시한다.


g
현재 Rmail 파일의 인박스로부터 새 메일을 합친다(
rmail-get-new-mail
).


C-u g file RET
인박스 파일
file
로부터 새 메일을 합친다.


1차 Rmail 파일 이외의 파일에서 Rmail을 실행하려면 Rmail에서 i (
rmail-input
)를 사용한다. 그러면 Rmail 모드에서 파일이 열린다. Rmail 에 위치하지 않더라도 M-x rmail-input 을 사용할 수 있지만 C-u M-x rmail 을 입력하면 동일한 효과를 더 수월하게 얻을 수 있다.


i 를 이용해 읽는 파일은 보통 유효한 mbox 파일이어야 한다. 유효한 파일이 아니면 Rmail은 그 텍스트를 mbox 포맷으로 변환하고, 버퍼에서 변환된 텍스트를 열려고 할 것이다. 사용자가 버퍼를 저장하면 파일이 변환된다.


존재하지 않는 파일명을 명시할 경우 i는 새 Rmail 파일을 생성하기 위해 새 버퍼를 초기화한다.


메뉴에서 Rmail 파일을 선택하는 방법도 있다. Classify 메뉴에서 Input Rmail File 항목을 선택한 후 원하는 Rmail 파일을 선택한다.
rmail-secondary-file-directory
rmail-secondary-file-regexp
변수는 메뉴에서 어떤 파일을 제공할 것인지 명시하는데, 첫 번째 변수는 그것을 검색할 디렉터리를 나타내고 두 번째는 해당하는 디렉터리에서 제시할 파일(정규 표현식에 일치하는)을 명시한다. 어떤 파일도 일치하지 않으면 이 메뉴 항목을 선택할 수 없다. 이러한 변수들은 출력할 파일을 선택할 때에도 적용된다(364 페이지의 30.7절 [Rmail 출력(Rmail Output)] 참고).


사용할 인박스 파일은 Rmail 모드에서 버퍼에 한정된(buffer-local)
rmail-inbox-list
변수로 명시된다. 한 가지 예외가 있는데, 1차 Rmail 파일에 명시된 인박스 파일이 없을 경우에는 MAIL 환경 변수를 사용하거나 사용자의 표준 시스템 인박스를 사용한다.


g 명령어는 (
rmail-get-new-mail
) 메일을 인박스로부터 현재 Rmail 파일로 합친다. Rmail 파일에 인박스가 없다면 g 는 아무 일도 수행하지 않는다. M-x rmail 명령어는 새 메일을 사용자의 1차 Rmail 파일로 합치기도 한다.


일반 인박스가 아닌 파일의 메일을 합치려면 g 키에 수치적 인자를 제공해야 한다(예: C-u g). 수치적 인자를 제공하면 파일명을 읽어와 그 파일의 메일을 합친다. 인자와 함께 g 를 이용하면 인박스 파일은 어떤 방식으로든 변경되거나 삭제되지 않는다. 따라서 이것은 메시지의 파일 하나를 다른 파일로 합치는 일반적인 방식이다.


메시지를 파일로 복사하기(Copying Messages Out to Files)

Rmail 파일의 메시지를 다른 파일로 복사하는 명령어로 다음이 있다.


o file RET
현재 메시지의 전체 복사본을 file 파일로 덧붙인다(
rmail-output
).


C-o file RET
표시된 현재 메시지의 복사본을 file 파일로 덧붙인다(
rmail-output-as-seen
).


w file RET
메시지 본문을 file 파일에 출력하고, 메시지 '
Subject
' 헤더에서 기본 파일명을 취한다.


oC-o 명령어는 현재 메시지를 명시된 파일로 복사하여 끝에 추가한다. 두 명령어는 복사하는 양에 차이가 있는데, o 는 모두 표시되지 않다 하더라도 전체 메시지 헤더를 복사하는 반면 C-o 는 현재 표시된 헤더만 복사한다. 373 페이지의 30.13절 [Rmail 디스플레이(Rmail Display)]를 참고한다. 또한 o 는 파일이 Babyl 포맷이라 하더라도 메시지를 Babyl 포맷으로 변환하는 반면 C-o 는 Babyl 파일로 출력할 수가 없다.


출력 파일이 현재 Emacs 버퍼에서 열려 있다면 출력 명령어는 메시지를 해당 버퍼에 덧붙인다. 버퍼를 그 파일에 저장하는 것은 전적으로 사용자에게 달려 있다.


가끔은 본문이 파일의 내용을 보유하는 메시지를 수신하기도 한다. w 명령어를 (
rmail-output-body-to-file
) 이용하면 본문을 파일로 저장할 수 있다(메시지 헤더는 제외). 종종 이러한 메시지들은 의도된 파일명을 'Subject' 필드에 포함하고 있으므로 w 명령어는 'Subject' 필드를 출력 파일명의 기본값으로 사용한다. 하지만 파일명은 미니버퍼를 이용해 읽기 때문에 사용자는 다른 이름을 명시해도 좋다.


메뉴로 선택한 Rmail 파일로 메시지를 출력할 수도 있다. Classify 메뉴에서 Output Ramil File 메뉴 항목을 선택한 후 원하는 Rmail 파일을 선택한다. 이는 o 명령어와 마찬가지로 현재 메시지를 해당 파일로 출력한다.
rmail-secondary-file-directory
rmail-secondary-file-regexp
변수는 메뉴에서 제공할 파일을 명시하는데, 첫 번째는 파일을 검색할 디렉터리를 명시하고 두 번째는 해당 디렉터리에서 제시할 파일(정규 표현식에 일치하는)을 명시한다. 어떠한 파일도 일치하지 않으면 이 메뉴 항목을 선택할 수 없다.


o 또는 C-o 를 이용해 메시지를 복사하면 메시지의 원본에 '
filed
' 라는 속성을 부여하고, 그러한 메시지가 현재 메시지가 되면 모드 라인에 '
filed
' 라고 표시된다.


모든 메일 메시지의 사본을 하나씩만 보관하고 싶을 경우
rmail-delete-after-output
변수를
t
로 설정하면 o, C-o, w 명령어를 사용할 때마다 메시지를 복사하고 나서 원본 메시지를 삭제한다(원한다면 후에 삭제를 취소할 수도 있다).


rmail-output-file-alist
변수는 현재 메시지의 내용을 기반으로 출력 파일에 대한 지능적 기본값을 명시하도록 해준다. 값은 아래의 형태로 된 요소들로 구성된 목록이어야 한다:
(regexp . name-exp)


현재 메시지에서 regexp 에 대한 일치 결과가 있다면 출력에 대한 기본 파일명은 name-exp 가 된다. 여러 개의 요소가 메시지에 일치하면 첫 번째로 일치하는 요소가 기본 파일명을 결정한다. 하위표현식 name-exp 는 사용할 파일명을 제공하는 문자열 상수가 될 수 있지만, 좀 더 일반적으로는 파일명을 문자열로 리턴하는 Lisp 표현식에 해당한다.
rmail-output-file-alist
oC-o 에 모두 적용된다.


Rmail 은
rmail-automatic-folder-directives
변수의 값을 바탕으로 당신의 1차 Rmail 파일(rmail-file-name이 명시하는 파일)의 메시지를 자동으로 다른 파일에 저장하는 기능도 있다. 이 변수는 어떤 메시지를 어디에 저장할 것인지 알려주는 요소의 목록이다('
directives
'). 각 지시어(directive)는 출력 파일 다음에 헤더명과 정규 표현식 쌍(들)으로 구성된 목록이다. 메시지가 명시된 정규 표현식에 일치하는 헤더를 가진 경우 해당 메시지는 주어진 파일로 저장된다. 지시어가 하나 이상의 헤더 엔트리를 가졌다면 모두 일치해야 한다. Rmail 은
rmail-file-name
으로부터 메시지를 표시할 때 지시어를 확인하고, 첫 번째로 일치하는 결과에 적용시킨다. 출력 파일이 nil이면 메시지는 저장되지 않고 삭제된다. 가령 이 기능은 특정 주소에서 오거나 특정 제목을 가진 메시지를 전용 파일로 저장할 때 사용할 수 있겠다.


라벨(Labels)

각 메시지는 분류화(classification)를 이용해 그것으로 할당되는 다양한 라벨(labels)을 가질 수 있다. 각 라벨에는 이름이 있으며, 이름마다 다른 라벨을 가진다. 주어진 라벨은 특정 메시지에서 존재하든 존재하지 않든, 둘 중 하나다. 몇몇 라벨명은 표준 의미를 지니고, Rmail 에 의해 적당한 시기에 자동으로 메시지에 주어지는데, 이러한 특별한 라벨을 속성(attributes)이라고 부른다. 다른 라벨들은 사용자에 의해서만 할당된다.


a label RET
라벨 label 을 현재 메시지로 할당한다(
rmail-add-label
).


k label RET
현재 메시지에서 라벨 label 을 제거한다(
rmail-kill-label
).


C-M-n labels RET
labels 라벨 중 하나를 가진 다음 메시지로 이동한다(
rmail-next-labeled-message
).


C-M-p labels RET
labels 라벨 중 하나를 가진 이전 메시지로 이동한다(
rmail-previous-labeled-message
).


l labels RET
C-M-l labels RET
labels 라벨 중에서 하나라도 포함하는 메시지 모두에 대한 요약을 만든다({{RoundTitleNavy|rmail-summary-by-labels}).


a (
rmail-add-label
) 와 k (
rmail-kill-label
) 명령어는 현재 메시지에 라벨을 할당하거나 그로부터 삭제하도록 해준다. label 인자가 비어 있으면 가장 최근에 할당되거나 삭제된 것과 동일한 라벨을 할당 또는 삭제한다.


원하는 대로 메시지를 분류하기 위해 라벨을 부여하고 나서 라벨을 사용하는 방법에는 세 가지, 즉 이동하기, 요약하기, 정렬하기가 있다.


C-M-n labels RET (
rmail-next-labeled-message
) 는 labels 라벨 중 하나를 가진 다음 메시지로 이동한다. 인자 labels 는 콤마로 구분된 하나 또는 이상의 라벨 이름을 명시한다. C-M-p (
rmail-previous-labeled-message
) 도 비슷하지만 이전 메시지로 역이동한다. 이 두 명령어에 수치적 인자를 제공하면 반복 계수 역할을 한다.


C-M-l labels RET (
rmail-summary-by-labels
) 명령어는 명시된 라벨 집합 중에서 적어도 하나를 포함하는 메시지만 모은 요약을 표시한다. 인자 labels 는 콤마로 구분된 하나 또는 이상의 라벨명이다. 요약에 관한 정보는 30.11절 [Rmail 서머리(Rmail Summary)]를 참고한다.


C-M-n, C-M-p, C-M-l 에 대한 labels 인자가 비어 있을 경우 이러한 명령어에 대해 명시된 마지막 라벨 집합을 사용할 것을 의미한다.


라벨을 이용한 메시지 정렬에 관한 정보는 372 페이지의 30.12절 [Rmail 정렬(Rmail Sorting)]을 참고한다.


Rmail 속성(Rmail Attributes)

'deleted'나 'filed'와 같은 일부 라벨은 내장된(built-in) 의미를 갖고 있고, Rmail은 이러한 라벨을 자동으로 적절한 때에 메시지에 할당하는데, 이러한 라벨을 속성(attributes)이라고 부른다. Rmail 속성을 아래에 소개하겠다:


'
unseen
' 메시지가 한 번도 현재 메시지였던 적이 없음을 의미한다. 인박스 파일로부터 올 때 메시지로 할당되어 현재 메시지가 되면 제거된다. 사용자가 Rmail을 시작하면 이 속성을 가진 첫 번째 메시지를 처음에 표시한다.


'
deleted
' 메시지가 삭제되었음을 의미한다. 삭제 명령어를 이용해 할당되고 삭제 취소 명령어를 이용해 제거된다(361 페이지의 30.4절 [Rmail 삭제(Rmail Deletion)] 참고).


'
filed
' 메시지가 다른 파일로 복사되었음을 의미한다. oC-o 파일 출력 명령어를 이용해 할당된다(364 페이지의 30.7절 [Rmail 출력(Rmail Output)] 참고).


'
answered
' 사용자가 메시지로 답변을 전송하였음을 의미한다. r 명령어를 이용해 할당된다(
rmail-reply
). 367 페이지의 30.10절 [Rmail 답장(Rmail Reply)] 참고한다.


'
forwarded
' 사용자가 메시지를 전달하였음을 의미한다. f 명령어를 이용해 할당된다(
rmail-forward
). 367 페이지의 30.10절 [Rmail 답장(Rmail Reply)] 참고한다.


'
edited
' 사용자가 Rmail 내에서 메시지의 텍스트를 편집하였음을 의미한다. 374 페이지의 30.15절 [Rmail 편집(Rmail Editing)]을 참고한다.


'
resent
' 사용자가 메시지를 재전송하였음을 의미한다. M-x rmail-resend 명령어를 이용해 할당된다. 367 페이지의 30.10절 [Rmail 답장(Rmail Reply)]을 참고한다.


'
retried
' 실패한 발송 메시지를 사용자가 재발송하였음을 의미한다. M-x rmail-retry-failure 명령어를 이용해 할당된다. 367 페이지의 30.10절 [Rmail 답장(Rmail Reply)]을 참고한다.


답장 전송하기(Sending Replies)

Rmail에는 발송 메일을 보내는 명령어가 몇 가지 있다. Message 모드를 포함해 Rmail과 작업하는 특정 기능에 관한 정보는 350 페이지의 29장 [메일 전송하기(Sending Mail)]를 참고한다. 이번 장에서는 메일 버퍼로 들어갈 때 사용하는 Rmail의 특수 명령어를 문서화하고자 한다. 메일 전송에 일반적으로 사용하는 키 C-x m, C-x 4 m, C-x 5 m 역시 Rmail 모드에서도 정상적으로 작동한다.


m
메시지를 전송한다(
rmail-mail
).


c
이미 시작된 나가는 메시지의 편집을 계속한다(
rmail-continue
).


r
현재 Rmail 메시지에 대한 답장을 전송한다(
rmail-reply
).


f
현재 메시지를 다른 사용자에게 전달한다(
rmail-forward
).


C-u f
현재 메시지를 다른 사용자에게 재전송한다(
rmail-resend
).


M-m
반송(bounced)된 메시지의 두 번째 전송을 시도한다(
rmail-retry-failure
).


Rmail 에 있을 때 메시지를 전송하는 데에 사용되는 가장 흔한 방법은 사용자가 읽는 메시지에 답장하는 것이다. 이를 실행하려면 r (
rmail-reply
) 을 입력한다. 그러면 메일 작성 버퍼가 다른 창에 표시되는데, C-x 4 m 과 다소 비슷하지만 사용자가 답장을 하려는 메시지를 기준으로 '
Subject
', '
To
', '
CC
', '
In-reply-to
', '
References
' 헤더 필드를 사전에 초기화한다(preinitialize). '
To
' 필드는 사용자가 수신한 메시지를 전송하였던 사람의 주소로 시작하고, '
CC
' 필드는 해당 메시지의 다른 모든 수신자들부터 시작한다.


mail-dont-reply-to-names
변수를 사용하면 답장을 보내는 데에 특정 수신자가 자동으로 포함되는 것을 막을 수 있다. 이 변수의 값은 정규 표현식이어야 하고, 그에 일치하는 수신자는 모두 '
CC
' 필드에서 제외된다. 필드를 비어두지 않는 이상 '
To
' 필드에서도 제외된다. 해당 변수의 값이
nil
일 경우 사용자가 답장을 처음으로 작성 시 사용자 고유의 주소에 일치하는 기본값으로 초기화된다.


어떠한 답장에 대해 '
CC
' 필드를 완전히 생략하려면 수치적 인자를 이용해 답장(reply) 명령어, C-u r 또는 1 r 을 입력한다. 이는 원본 메시지의 발신자에게만 답장함을 의미한다.


메일 작성 버퍼가 초기화되고 나면 메일의 편집 및 전송은 평소대로 진행된다(350 페이지의 29장 [메일 전송하기(Sending Mail)] 참고). 사전에 제공되는 헤더 필드가 마음에 들지 않으면 편집해도 좋다. 또한 C-c C-y 와 같은 명령어를 이용해 사용자가 답장하는 메시지에 붙여 넣을 수도 있다(353 페이지의 29.4절 [메일 명령어(Mail Commands) 참고]. Rmail 버퍼로 전환하여 다른 메시지를 선택한 후 다시 되돌아와 현재 새 메시지를 붙여 넣기할 수도 있다.


가끔 메시지가 목적지에 도달하지 않는 경우도 있다. 메일러는 보통 전송이 실패한 메시지를 다시 실패 메시지(failure message)로 담아 당신에게 전송한다. Rmail 명령어 M-m (
rmail-retry-failure
)은 동일한 메시지를 두 번째로 전송할 준비를 한다. 즉, 이전과 동일한 텍스트 및 헤더 필드로 메일 작성 버퍼를 준비하는 것이다. C-c C-c 를 즉시 입력하면 처음과 정확히 동일하게 메시지를 전송한다. 아니면 텍스트나 헤더를 편집하여 전송할 수도 있다.
rmail-ignored-headers
와 동일한 포맷으로 된
rmail-retry-ignored-headers
변수는 (373 페이지의 30.13절 [Rmail 디스플레이(Rmail Display)] 참고) 전송 실패한 메시지를 재전송할 때 메시지의 제목을 제거할 것인지 결정한다.


Rmail 에서 메일을 전송하는 또 다른 이유로 현재 메시지를 다른 사용자들에게 전달하는 기능을 들 수 있다. f (
rmail-forward
) 를 누르면 현재 메시지를 텍스트로 하고
[from: subject]
형태로 된 제목을 가진 메일 작성 버퍼를 사전에 초기화하는데, 여기서 from과 subject는 원본 메시지의 발신자와 제목을 나타낸다. 사용자는 그저 수신자를 기입하고 전송만 하면 된다. 메시지를 전달하면 수신자는 원본의 내용을 그대로 담은 메시지를 "당신으로부터" 받는 것이다.


Rmail은 전달하는 메시지에 두 가지 포맷을 제공한다. 기본값은 MIME 포맷을 사용한다(373 페이지의 30.13절 [Rmail 디스플레이(Rmail Display)] 참고). 이는 원본 메시지를 별도의 부분으로 포함시킨다. 원한다면
rmail-enable-mime-composing
변수를
nil
로 설정함으로써 더 단순한 포맷을 사용할 수 있다. 이런 경우 Rmail 은 두 개의 구분 라인 사이에 원본 메시지를 포함할 뿐이다. 또한 라인의 끝에 '
-
'를 삽입하여 대시로 시작되는 라인마다 모두 수정한다. 이러한 포맷으로 전달된 메시지를 수신할 때 일반 텍스트가 아닌 다른 내용, 즉 프로그램 소스 코드와 같은 내용이 포함되어 있을 경우 그러한 변형(transformation)을 실행 취소하는 편이 유용함을 알게 될 것이다. 변형의 실행 취소는 전달된 메시지를 선택하고 M-x unforward-rmail-message 를 입력하면 된다. 이 명령어는 전달된 원본 메시지를 압축 해제하고, 삽입된 '
-
' 문자열을 삭제하여 현재 메시지 바로 뒤에 구분된 메시지로서 Rmail 파일에 넣는다.


재전송(resending)은 전달하기와 유사한 대안 방법이지만 재전송 시 원래 "발신자에게서 온" 메시지를 그대로 전송한다는 데에 차이가 있는데, 단 당신을 통해서 전송된다는 사실을 알리기 위해 헤더 필드가 몇 가지 더 추가된다('
Resent-From
' 과 '
Resent-To
'). Rmail에서 메시지를 재전송하려면 C-u f 를 사용하라. (f
rmail-forward
를 실행하고, 이는 수치적 인자가 제공된다면
rmail-resend
를 호출할 것이다.)


m (
rmail-mail
) 명령어를 이용해 답장이 아닌 발송 메시지의 편집을 시작할 수 있다. 이 명령어는 헤더 필드를 비워둘 것이다. 해당 명령어가 C-x 4 m 과 유일하게 다른 점은 r 과 마찬가지로 C-c C-y 를 이용할 때 Rmail 버퍼로 접근이 가능해진다는 점이다.


c (
rmail-continue
) 명령어는 메일 작성 버퍼의 편집을 재개하여 사용자가 이미 작성 중이던 발송 메시지의 편집을 완료하도록 해주거나, 사용자가 전송한 메시지를 수정하도록 해준다.


rmail-mail-new-frame
변수를
nil
이 아닌 값으로 설정할 경우 메시지 전송을 시작하기 위한 Rmail 명령어들은 모두 그것을 편집할 새로운 프레임을 생성한다. 해당 프레임은 사용자가 메시지를 전송하면 삭제된다.


메시지를 전송하는 데에 사용되는 모든 Rmail 명령어들은 당신이 선택한 메일작성(mail-composition) 방법을 사용한다(357 페이지의 29.7절 [메일작성 방법(Mail Methods)] 참고).


서머리(Summaries)

서머리(summary)는 Rmail 파일의 메일에 대한 개요를 제공하기 위해 메시지마다 하나의 라인을 포함하는 버퍼이다. 각 라인은 메시지 번호와 날짜, 수신자, 라인 수(line count), 라벨, 제목을 표시한다. 서머리 버퍼에서 포인트를 이동하면 서머리 라인으로 이동하면서 메시지를 선택한다. 거의 모든 Rmail 명령어를 서머리 버퍼에서도 이용할 수 있으며, 이용 시 서머리의 현재 라인에서 설명하는 메시지에 명령어가 적용된다.


서머리 버퍼는 하나의 Rmail 파일에만 적용되므로 여러 Rmail 파일을 편집 중이라면 각각 고유의 서머리 버퍼를 가질 수 있다. 서머리 버퍼명은 Rmail 버퍼명 뒤에 '
-summary
' 를 붙여 명명된다. 보통은 한 번에 하나의 서머리 버퍼만 표시된다.


서머리 만들기(Making Summaries)

현재 Rmail 버퍼에 대한 서머리를 생성하는 명령어들이 있다. Rmail 버퍼가 서머리를 갖게 되면 Rmail 버퍼에 변경 사항이 발생할 경우 (메시지 삭제, 메시지 휴지통 비우기, 새 메일 수신하기 등) 서머리도 자동으로 업데이트된다.


h
C-M-h
모든 메시지를 요약한다(
rmail-summary
).


l labels RET
C-M-l labels RET
명시된 라벨 중 하나 이상을 가진 메시지를 요약한다(
rmail-summary-by-labels
).


C-M-r rcpts RET
명시된 수신자에 일치하는 메시지를 요약한다(
rmail-summary-byrecipients
).


C-M-t topic RET
명시된 regexp topic에 일치하는 결과를 제목에 포함하는 메시지를 요약한다(
rmail-summary-by-topic
).


C-M-s regexp RET
헤더가 명시된 정규 표현식 regexp에 일치하는 메시지를 요약한다(
rmail-summary-by-regexp
).


C-M-f senders RET
명시된 수신자에 일치하는 메시지를 요약한다(
rmail-summary-bysenders
).


h 또는 C-M-h (
rmail-summary
) 명령어는 현재 Rmail 버퍼에 대한 서머리 버퍼를 버퍼 내 모든 메시지의 요약으로 채운다. 이후 서머리 버퍼를 다른 창에 표시하고 선택한다.


C-M-l labels RET (
rmail-summary-by-labels
)는 라벨 labels 중 하나 이상을 가진 메시지만 표시하는 부분적 요약을 만든다. labels는 콤마로 구분된 라벨 이름을 포함해야 한다.


C-M-r rcpts RET (
rmail-summary-by-recipients
)는 하나 이상의 수신자가 정규 표현식 rcpts에 일치하는 메시지만 표시하는 부분적 요약을 만든다. '
To
', '
From
', '
CC
' 헤더를 상대로 매칭을 실행한다(이러한 헤더를 제외하기 위해서는 접두 인자를 제공하라).


C-M-t topic RET (
rmail-summary-by-topic
)는 제목이 정규 표현식 topic에 일치하는 메시지만 표시하는 부분적 요약을 만든다. 여러 정규 표현식을 구분하려면 콤마를 사용한다. 접두 인자를 이용하면 제목뿐만 아니라 전체 메시지를 대상으로 매칭한다.


C-M-s regexp RET (
rmail-summary-by-regexp
)는 헤더(날짜와 제목 라인도 포함)가 정규 표현식 regexp에 일치하는 메시지만 표시하는 부분적 요약을 만든다.


C-M-f senders RET (
rmail-summary-by-senders
)는 'From' 필드가 정규 표현식 senders 에 일치하는 메시지만 표시하는 부분적 요약을 만든다. 여러 정규 표현식을 구분하려면 콤마를 사용한다.


어떤 Rmail 버퍼든 하나의 서머리 버퍼만 존재하므로 어떤 유형의 서머리를 만들든 이전 서머리는 제거된다.


변수
rmail-summary-window-size
는 서머리 창에 사용할 라인 수를 나타낸다.
rmail-summary-line-count-flag
변수는 메시지에 대한 서머리 라인에 메시지의 라인 수를 포함시켜야 할지를 결정한다. 해당 옵션을 nil로 설정하면 서머리 생성 속도가 빨라질 것이다.


서머리에서 편집하기(Editing in Summaries)

Rmail 버퍼에서 작업할 때는 Rmail 서머리 버퍼를 이용하면 거의 모든 일을 해결할 수 있다. 사실 서머리 버퍼만 있다면 Ramil 버퍼로 다시 전환할 필요도 없다.


서머리 버퍼의 여러 라인으로 포인트만 이동하면 Rmail 버퍼의 다양한 메시지를 선택하여 표시할 수 있다. 포인트를 이동하기 위해 어떤 Emacs 명령어를 사용하는지는 상관없으며, 명령어 끝에 포인트가 어떤 라인에 위치하든 Rmail 버퍼에서 메시지가 선택된다.


거의 모든 Rmail 명령어는 Rmail 버퍼를 비롯해 서머리 버퍼에서 작동한다. 따라서 서머리 버퍼에서 d 를 사용하면 현재 메시지를 삭제하고, u 는 삭제를 취소하며, x 는 휴지통을 비운다(expunge). (하지만 서머리 버퍼에서 d, C-d, u 로 수치적 인자를 제공하면 반복 계수의 역할을 한다. 음수는 C-dd 의 의미를 반전시킨다. 상관된 방향으로 삭제되지 않은 메시지가 더 이상 없을 시 삭제 명령어는 현재 메시지에 머무는 대신 처음이나 마지막 메시지로 이동한다.) oC-o 는 FILE 로 현재 메시지를 출력하고, r 은 그에 응답하는 식이다. SPCDEL 을 이용해 서머리 버퍼에서 현재 메시지를 유지시키면서 스크롤할 수 있다.


M-u (
rmail-summary-undelete-many
)는 서머리에서 삭제된 메시지를 모두 삭제 취소한다. 접두 인자는 이전에 삭제된 메시지에서 몇 개나 삭제를 취소할 것인지 나타낸다.


메시지들 간 이동에 사용되는 Rmail 명령어는 서머리 버퍼에서도 작동하지만 서머리 버퍼에 포함된 메시지 집합을 통해 이동한다는 점이 다르다. 또한 화면에 Rmail 버퍼가 나타나도록 보장하기도 한다(Rmail 버퍼 내용은 업데이트하지만 창에 내용이 이미 표시되어 있지 않은 이상 별도로 내용을 표시하지는 않는 커서 움직임 명령어들과는 다르다). 이러한 명령어를 몇 가지 열거하겠다:


n
'deleted' 라인은 건너뛰고 다음 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-next-msg
).


p
'deleted' 라인은 건너뛰고 이전 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-previous-msg
).


M-n
다음 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-next-all
).


M-p
이전 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-previous-all
).


>
마지막 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-last-message
).


<
첫 라인으로 이동하여 그 메시지를 선택한다(
rmail-summary-first-message
).


j
RET
현재 라인에서 메시지를 선택한다(Rmail 버퍼가 화면에 표시되도록 확보한다;
rmail-summary-goto-msg
). 인자 n 을 이용해 메시지 번호 n 을 선택하여 서머리 버퍼에서 해당하는 라인으로 이동한다. 메시지가 서머리 버퍼에 열거되어 있지 않은 경우 오류를 보낸다.


M-s pattern RET
현재 메시지부터 시작해 메시지에서 pattern 을 검색한다. 발견된 메시지를 선택하고 서머리 버퍼에서 해당 메시지의 라인으로 포인트를 이동한다(
rmail-summary-search
). 접두 인자는 반복 계수 역할을 하므로 음수는 역방향 검색을 의미한다(
rmail-summary-search-backward
와 동일)


C-M-n labels RET
명시된 라벨 중 최소 하나를 가진 다음 메시지로 이동한다(
rmail-summary-next-labeled-message
). labels 는 콤마로 구분된 라벨 목록이다. 접두 인자는 반복 계수 역할을 한다.


C-M-p labels RET
명시된 라벨 중 최소 하나를 가진 이전 메시지로 이동한다(
rmail-summary-previous-labeled-message
).


C-c C-n RET
현재 메시지와 제목이 동일한 다음 메시지로 이동한다(
rmail-summary-next-same-subject
). 접두 인자는 반복 계수 역할을 한다.


C-c C-p RET
현재 메시지와 제목이 동일한 이전 메시지로 이동한다(
rmail-summary-previous-same-subject
).


삭제, 삭제 취소, 새 메일 받기, 심지어 다른 메시지의 삭제도 Rmail 버퍼에서 실행하면 서머리 버퍼를 업데이트하도록 되어 있다.
rmail-redisplay-summary
변수가
nil
이 아닐 경우 이러한 실행은 화면으로 서머리 버퍼를 다시 가져올 것이다.


서머리 버퍼의 사용이 끝나면 Q (
rmail-summary-wipe
) 를 입력하여 서머리 버퍼 창을 삭제한다. 서머리 버퍼에 있는 동안 Rmail 을 종료하기 위해 q (
rmail-summary-quit
) 를 입력하면 서머리 창을 삭제한 후 Rmail 파일을 저장하고 다른 버퍼로 전환함으로써 Rmail 을 종료시킨다. b (
rmail-summary-bury
) 를 이용해 Rmail 서머리와 버퍼를 단순히 bury하는 방법도 있다.


Rmail 파일 정렬하기(Sorting the Rmail File)

C-c C-s C-d
M-x rmail-sort-by-date
현재 Rmail 버퍼의 메시지를 날짜별로 정렬한다.


C-c C-s C-s
M-x rmail-sort-by-subject
현재 Rmail 버퍼의 메시지를 제목별로 정렬한다.


C-c C-s C-a
M-x rmail-sort-by-author
현재 Rmail 버퍼의 메시지를 작성자 이름별로 정렬한다.


C-c C-s C-r
M-x rmail-sort-by-recipient
현재 Rmail 버퍼의 메시지를 수신자 이름별로 정렬한다.


C-c C-s C-c
M-x rmail-sort-by-correspondent
현재 Rmail 버퍼의 메시지를 다른 발신자(correspondent)의 이름별로 정렬한다.


C-c C-s C-l
M-x rmail-sort-by-lines
현재 Rmail 버퍼의 메시지를 라인 수별로 정렬한다.


C-c C-s C-k RET labels RET
M-x rmail-sort-by-labels RET labels RET
현재 Rmail 버퍼의 메시지를 라벨별로 정렬한다. 인자 labels는 콤마로 구분된 라벨 목록이다. 라벨의 순서는 메시지의 순서를 명시하므로, 첫 번째 라벨이 있는 메시지가 먼저 오고 두 번째 라벨이 있는 메시지가 두 번째는 오는 식이다. 라벨이 전혀 없는 메시지는 마지막에 위치할 것이다.


Rmail 정렬 명령어는 안정적 정렬(stable sort)을 실행하므로 두 메시지 중에서 하나를 선호해야 할 이유가 없다면 정렬은 변경되지 않는다. 이 명령어는 하나 이상의 기준으로 정렬 시에 사용해도 좋다. 가령
rmail-sort-by-date
rmail-sort-by-author
를 연이어 사용하면 동일한 작성자가 보낸 메시지가 날짜순으로 표시될 것이다.


접두 인자를 이용하면 이 명령어는 모두 비교순서를 역전시킬 것이다. 이는 최신부터 오래된 순으로, 큰 것부터 작은 순으로, 또는 알파벳 역순으로 메시지를 정렬함을 의미한다.


서머리 버퍼에서 동일한 키를 사용하여 비슷한 함수를 실행하는데, 가령 C-c C-s C-l
rmail-summary-sort-by-lines
를 실행한다. 이러한 명령어들은 서머리가 메시지의 하위집합만 표시한다 하더라도 항상 전체 Rmail 버퍼를 정렬함을 명심한다.


메시지 표시(Display of Messages)

이번 절에서는 Rmail이 메일 헤더, MIME 섹션과 첨부파일(attachment), URLs, 암호화된 메시지를 어떻게 표시하는지 설명한다.


t
전체 헤더의 표시 기능을 토글한다(
rmail-toggle-header
).


각 메시지를 처음으로 표시하기 전에 Rmail은 클러터를 줄이기 위해 헤더를 재포맷팅하여 덜 중요한 헤더 필드를 숨긴다. t (
rmail-toggle-header
) 명령어가 재포맷팅된 헤더 필드의 표시와 전체 원본 헤더 표시를 토글한다. 접두 인자가 양수일 경우 명령어는 재포맷팅된 헤더를 표시하고, 음수나 0일 경우 전체 헤더를 표시한다. 메시지를 다시 선택하여도 필요하다면 재포맷팅한다.


rmail-ignored-headers
변수는 숨길 헤더 필드를 명시하는 정규 표현식을 보유하고, 일치하는 헤더 라인은 숨길 것이다.
rmail-nonignored-headers
변수는 이것을 오버라이드하므로 해당 정규 표현식에 매칭하는 헤더 필드는
rmail-ignored-header
변수에 매칭하더라도 표시된다.
rmail-displayed-headers
변수는 이 두 개의 변수 대신 사용할 수 있는 변수로,
nil
값이 아닌 경우 표시할 헤더를 명시하는 정규 표현식을 값으로 해야 한다(기본값은
nil
이다).


Rmail 은 특별히 흥미로운 헤더 필드를 강조하는데, 기본값으로 '
From
' 과 '
Subject
' 필드가 강조된다. 이는
rmail-highlight
겉모습을 이용해 강조된다.
rmail-highlighted-headers
변수는 강조할 헤더 필드를 명시하는 정규 표현식을 보유하는데, 이것이 헤더 필드의 시작에 매칭할 경우 전체 필드가 강조된다. 기능을 끄려면
rmail-highlighted-headers
nil
로 설정하라.


메시지가 MIME (다목적 인터넷 전자 우편) 포맷으로 여러 부분(MIME 엔티티)을 포함한다면 Rmail 은 각 부분을 태그라인(tagline)과 함께 표시한다. 태그라인은 각 부분의 색인, 크기, 내용 유형을 요약한다. 그리고 내용 유형에 따라 하나 또는 이상의 버튼을 포함하는데, 이러한 버튼들은 각 부분을 파일로 저장하는 것과 같은 동작을 실행한다.


RET
포인트에 MIME 부분을 숨기거나 표시한다(
rmail-mime-toggle-hidden
).


TAB
포인트를 다음 MIME 태그라인 버튼으로 이동한다(
rmail-mime-next-item
).


S-TAB
포인트를 이전 MIME 부분으로 이동한다(
rmail-mime-previous-item
).


v
MIME 디스플레이와 raw 메시지를 토글한다(
rmail-mime
).


일반 텍스트(plain-text)로 된 MIME 부분마다 태그라인 직후에 Rmail 버퍼의 일부로서 처음 표시되는 반면 다른 유형으로 된 MIME 부분들은 실제 내용은 숨기고 태그라인으로만 표시된다. 어떤 경우든 MIME 부분은 그 부분이나 태그라인 어디서든 RET 을 입력하여 "displayed"와 "hidden" 상태를 토글할 수 있다(다른 액션을 실행하는 버튼은 제외된다). 태그라인 버튼을 활성화하려면 RET 을 입력(또는 마우스로 클릭)하고, 태그라인 버튼들 간에 포인트를 순환하려면 TAB 을 누른다.


v (
rmail-mime
) 명령어는 위에 설명한 기본 MIME 디스플레이와 디코딩되지 않은 MIME 데이터를 표시하는 "raw" 디스플레이를 토글한다. 접두 인자를 이용해 이 명령어는 포인트에 있는 엔티티의 표시 여부만 토글한다.


Rmail 이 MIME 디코딩된 메시지를 처리하지 못하도록 하려면
rmail-enable-mime
변수를
nil
로 변경한다. 이런 경우 v (
rmail-mine
) 명령어는 현재 MIME 메시지를 표시하기 위해 임시 버퍼를 대신 생성한다.


현재 메시지가 암호화되어 있다면 EasyPG 라이브러리를 이용하는 M-x rmail-epa-decrypt 를 이용해 해독하라(EasyPG Assistant User's Manual 의 "EasyPG"절 참고).


Goto Address 모드를 이용해 Rmail 버퍼에서 URLs 를 강조하고 활성화할 수도 있다:

(add-hook 'rmail-show-message-hook 'goto-address-mode)


이제 Mouse-2 로 (또는 Mouse-1 을 빠르게) URLs를 클릭하거나 URL로 이동하여 C-c RET 을 입력하여 브라우징한다. 관련 내용은 405 페이지의 31.11.2절 [URLs 활성화하기(Activating URLs)]를 참고한다.


Rmail과 코딩 시스템(Rmail and Coding Systems)

사용자가 여는 파일이나 하위프로세스 출력을 Emacs가 자동으로 디코딩하듯이 Rmail은 non-ASCII 문자를 포함하는 메시지를 자동으로 디코딩한다. Rmail 은 메시지의 표준 '
charset=charset
' 헤더를 이용하여 메시지가 발신자에 의해 어떻게 인코딩되는지를 결정한다. 이는 그에 해당하는 Emacs 코딩 시스템으로 charset을 매핑하고 (183 페이지의 19.5절 [코딩 시스템(Coding System)] 참고) 해당 코딩 시스템을 이용하여 메시지 텍스트를 디코딩한다. 메시지 헤더가 '
charset
' 명세를 갖고 있지 않을 경우 또는 charset 이 인식되지 않을 경우 Rmail 은 일반 Emacs 휴리스틱과 기본값을 이용해 코딩 시스템을 선택한다(185 페이지의 19.6절 [코딩 인식하기(Recognize Coding)] 참고).


종종 메시지가 올바르지 않게 디코딩되기도 하는데 '
charset
' 명세가 없을 때 Emacs가 올바르지 않은 코딩 시스템을 짐작하거나 명세가 올바르지 않아서 발생하는 일이다. 예를 들어, 잘못 설정된 메일러(mailer)는 사실상 메시지가 koi8-r로 인코딩되었는데 '
charset=iso-8859-1
' 헤더가 있는 메시지를 전송할 수 있다. 메시지 텍스트가 잘못 표시되거나 텍스트의 일부가 16진 코드나 빈 박스로 표시되는 경우에 이것이 원인일 수 있다.


올바른 코딩 시스템을 알아내거나 짐작할 수 있다면 그것을 이용해 메시지를 다시 디코딩하면 문제를 수정할 수 있다. 이를 위해 M-x rmail-redecode-body 명령어를 호출한다. 이 명령어는 코딩 시스템의 이름을 읽고 사용자가 명시한 코딩 시스템을 이용해 메시지를 다시 디코딩한다. 올바른 코딩 시스템을 명시하였다면 결과를 읽을 수 있을 것이다.


Rmail 에서 새 메일을 수신할 때 각 메시지는 마치 구분된 파일인 것처럼 그것을 작성한 코딩 시스템으로부터 자동으로 해석된다. 이는 사용자가 명시한 코딩 시스템의 우선순위 목록을 사용한다. MIME 메시지가 문자 집합을 명시하면 Rmail은 그 명세를 따른다. Rmail 파일 자체를 읽고 저장하기 위해 Emacs 는
rmail-file-coding-system
변수가 명시하는 코딩 시스템을 사용한다. 기본값은
nil
이며, Rmail 파일이 해석되지 않음을 의미한다(Emacs 내부 문자 코드로 읽히고 쓰인다).


메시지 내에서 편집하기(Editing Within a Message)

대부분의 일반 Emacs 키 바인딩은 Rmail 모드에서 이용할 수 있지만 C-M-nC-M-h 등 몇 가지는 다른 용도로 Rmail 에 의해 재정의된다. 하지만 Rmail 버퍼는 보통 읽기 전용으로, 대부분의 글자는 Rmail 명령어로 재정의된다. 메시지의 텍스트를 편집하고 싶다면 Rmail 명령어 e 를 사용해야 한다.


e
현재 메시지를 일반 텍스트로서 편집한다.


e 명령어는 (
rmail-edit-current-message
) Rmail 모드를 Text 모드와 거의 동일한 주 모드에 해당하는 Rmail Edit 모드로 전환한다. 모드 라인은 이러한 변경 사항을 표시한다.


Rmail Edit 모드에서 글자는 평소대로 자체적으로 삽입되고 Rmail 명령어는 이용할 수 없다. 메시지 본문과 헤더 필드의 편집도 가능하다. 메시지의 편집이 끝나면 C-c C-c 를 입력하여 Rmail 모드로 다시 전환한다. 아니면 Rmail 모드로 돌아가되 지금까지 진행한 편집을 취소하려면 C-c C-] 를 입력한다.


Rmail Edit 모드로 들어가면
text-mode-hook
훅을 실행한 후
rmail-edit-mode-hook
훅을 실행한다(422 페이지의 33.2.2절 [훅(Hooks)] 참고). 메시지에 변경 사항이 있을 경우 일반 Rmail 모드로 돌아가면 메시지에 'edited'라는 속성이 추가된다.


다이제스트 메시지(Digest Messages)

다이제스트 메시지(digest message)는 여러 메시지를 포함하고 이동하기 (carry) 위해 존재하는 메시지다. 다이제스트 메시지는 일부 메일링 리스트에서 사용되는데, 일정한 시간 동안 리스트에 도달하는 메시지는 모두 구독자에게 전송되는 하나의 다이제스트에 보관된다. 하나의 다이제스트를 전송하면 총 크기는 같을지언정 개별 메시지를 전송할 때보다 컴퓨터 시간이 짧아지는데, 네트워크 메일 전송 시 메시지당 오버헤드 때문이다.


다이제스트 메시지를 수신할 때 메시지를 읽는 가장 편리한 방법은 undigestify하는 것으로, 다수의 개별 메시지로 다시 되돌리는 방법이다. 이후 사용자는 원할 때마다 개별 메시지를 읽고 삭제할 수 있다. 이를 가능하게 하려면 다이제스트 메시지를 선택하고 M-x undigestify-rmail-message 명령어를 입력한다. 그러면 하위메시지를 구분된 Rmail 메시지로 압축 해제하여 다이제스트 메시지 다음에 삽입한다. 다이제스트 메시지 자체는 삭제된 것으로 flag된다.


Rot13 메시지 읽기(Reading Rot13 Messages)

독자들을 짜증나게 만드는 메일링 리스트 메시지는 rot13 이라는 단순한 코드로 인코딩되곤 하는데, 이것은 알파벳을 13개 글자만큼 회전하기 때문에 붙여진 이름이다. 이 코드는 어떠한 기능도 제공하지 않기 때문에 비밀로 할 필요가 없으며, 오히려 메시지의 실제 텍스트를 표시하지 않길 원하는 사용자에게 유용하다. 예를 들어 영화 리뷰에서 rot13 을 이용하면 중요한 줄거리 포인트를 숨길 수 있다.


rot13 코드를 사용하는 버퍼를 확인하려면 M-x rot13-other-window 명령어를 사용하라. 이 명령어는 텍스트를 표시할 때 코드를 적용하는 현재 버퍼를 다른 창에 표시할 것이다.


movemail 프로그램(movemail program)

Rmail 은
movemail
프로그램을 이용해 사용자의 인박스에 있는 메일을 Rmail 파일로 옮긴다(362 페이지의 30.5절 [Rmail 인박스(Rmail Inbox)] 참고). Rmail 을 처음으로 로딩하면
movemail
프로그램을 찾아서 버전을 확인한다.
movemail
프로그램에는 두 가지 버전이 있는데, 하나는 native 버전으로 GNU Emacs와 함께 배포되고 ("emacs version"), 나머지는 GNU mailutils 에 포함되어 있다("mailutils version", GNU mailutils의 "movemail"절 참고). 둘 다 동일한 명령행 구문과 동일한 옵션의 부분 집합을 지원한다. 하지만 Milutils 버전은 추가 기능을 제공한다.


movemail
의 Emacs 버전은 POP3 프로토콜을 이용하여 원격 메일박스와 일반 Unix 메일박스에서 메일을 검색할 수 있다.


Mailutils 버전은 일반 Unix 메일박스,
maildir
,
MH
메일박스 등 다양한 메일박스 포맷을 처리할 수 있다. 또한 POP3 또는 IMAP4 프로토콜을 이용해 원격 메일박스로 접근하고, TLS로 암호화된 채널을 이용해 그러한 메일박스에서 메일을 검색할 수도 있다. 메일박스 URLs에 관한 상세한 설명은 Mailbox URL Formats의 "URL"절에서 찾을 수 있다. 간략하게 말해 URL은 다음과 같다:
proto://[user[:password]@] host-or-file-name


여기서 사각 괄호는 선택적 요소를 나타낸다.

proto
사용할 mailbox protocol 또는 format 을 명시한다. 나머지 URL 요소에 대한 정확한 구문은 실제 proto 값에 따라 좌우된다(아래 참고).


user
원격 메일박스에 접근하기 위한 사용자 이름.


password
원격 메일박스에 접근하기 위한 사용자 암호.


host-or-file-name
로컬 메일박스의 파일명이나 원격 메일박스에 대한 원격 서버의 호스트명.


Proto 는 아래 중 하나의 값이 될 수 있다.


mbox
일반적인 Unix 메일박스 포맷. 이 경우 userpass 모두 사용되지 않으며, host-or-file-name 은 메일박스 파일명을 나타낸다(예:
mbox://var/spool/mail/smith
).


mh
MH 포맷으로 된 로컬 메일박스. Userpass 는 사용되지 않는다. Host-or-file-name 은 MH 폴더명을 나타낸다(예:
mh://Mail/inbox
).


maildir
maildir 포맷으로 된 로컬 메일박스. Userpass 는 사용되지 않으며, host-or-file-name
maildir
메일박스의 이름을 나타낸다(예:
maildir://mail/inbox
).


file
로컬메일 포맷. 실제 포맷은
movemail
에 의해 자동으로 인식된다.


pop
POP3 프로토콜을 통해 접근하는 원격 메일박스. User 는 사용할 원격 사용자 이름을 명시하고 pass 는 사용자 암호를 명시하는 데에 사용할 수 있으며 host-or-file-name 은 연결할 원격 메일 서버의 이름 또는 IP 주소(예:
pop://smith:guessme@remote.server.net
) 에 해당한다.


imap
IMAP4 프로토콜을 통해 접근하는 원격 메일박스. User 는 사용할 원격 사용자 이름을 명시하고 pass 는 사용자 암호를 명시하는 데에 사용할 수 있으며 host-or-file-name 은 연결할 원격 메일 서버의 이름 또는 IP 주소(예:
imap://smith:guessme@remote.server.net
) 에 해당한다.


아니면 사용할 메일박스의 파일명을 명시할 수도 있는데, 이것은 '
file
' 프로토콜을 명시하는 것과 동일하다:
/var/spool/mail/user = file://var/spool/mail/user


rmail-movemail-program
변수는 사용할
movemail
버전을 제어한다. 값이 문자열일 경우
movemail
실행 파일의 절대 파일명을 명시한다. 값이
nil
일 경우 Ramil 은
rmail-movemail-search-path
,
exec-path
(383 페이지의 31.4절 [셸(Shell)] 참고),
exec-directory
순으로 그 내부에 열거된 디렉터리에서
movemail
을 검색한다.


원격 메일박스에서 메일 검색하기(Retrieving Mail from Remote Mailboxes)

일부 사이트에서는 인박스 파일에 데이터를 보관하는 대신 인박스 데이터로 접근하는 데에 POP라는 방법을 사용한다. 기본적으로
Emacs movemail
은 POP 와 작업할 수 있도록 되어 있다(Emacs
configure
스크립트가 '
--without-pop
' 옵션으로 실행되는 경우는 제외된다).


이와 비슷하게 '
--disable-pop
' 옵션을 설정하지 않는 이상 Mailutils
movemail
은 기본적으로 POP을 지원한다.


두 가지
movemail
버전 모두 POP3 만 지원하고 오래된 POP 버전과는 작동하지 않는다.


어떤
movemail
을 사용하든 POP URL 을 이용해 POP 인박스를 명시할 수 있다(375 페이지의 30.18절 [Movemail] 참고). POP URL 은 '
pop://username@hostname
' 형태로 된 "파일명" 으로, hostname 은 원격 메일 서버의 IP 주소 또는 호스트명에 해당하고 username 은 해당 서버의 사용자명에 해당한다. 또한 메일박스 URL 에 암호를 명시해도 좋다('
pop://username:password@hostname
'). 암호를 명시할 경우 password
rmail-remote-password
(아래 참고)가 설정한 값보다 우선한다. 여러 개의 원격 메일박스가 서로 다른 암호를 가질 때 특히 유용한 기능이다.


구버전과 호환성을 위해 Rmail 은 원격 POP 메일박스를 명시하는 다른 방법도 지원한다. '
po:username:hostname
' 형태로 된 인박스 이름을 명시하는 것은 '
pop://username@hostname
'과 동일하다. :hostname 부분을 생략할 경우
MAILHOST
환경 변수는 POP 서버를 검색할 머신을 명시한다.


원격 메일박스로 접근하는 또 다른 방법으로 IMAP 이 있다. 이 방법은 Mailutils
movemail
에서만 지원한다. 인박스 목록에 IMAP 메일박스를 명시하려면 '
imap://username[:password]@hostname
'이란 메일박스 URL을 사용하라. password 부분은 위에서 설명한 바와 같이 선택적이다.


원격 메일박스로 접근하기 위해서는 암호가 필요할지도 모른다. Rmail은 암호 검색 시 다음과 같은 알고리즘을 사용한다:

  1. password가 메일박스 URL에 존재하면 그것을 사용한다(위 참고).
  2. rmail-remote-password-required
    변수가
    nil
    일 경우 Rmail은 암호가 필요하지 않다고 가정한다.
  3. rmail-remote-password
    변수가
    nil
    이 아닌 경우 그 값이 사용된다.
  4. 나머지 경우에는 사용할 암호를 Rmail 에서 요청할 것이다.


추가 명령행 플래그를
movemail
로 전달해야 하는 경우
rmail-movemail-flags
변수를 사용하고자 하는 플래그의 목록으로 설정한다. 사용자 인박스 내용을 보관하기 위해 이 변수를 이용하여 '
-p
' 플래그를 전달하지 말라. 대신
rmail-preserve-inbox
를 사용하라.


사이트에 설치된
movemail
프로그램이 Kerberos authentication 을 지원할 수도 있다(Emacs 가
--with-kerberos
또는
--with-kerberos5
옵션으로 설정되었을 경우 Emacs
movemail
은 그것을 지원한다). Kerberos authentication 이 지원된다면
rmail-remote-password
rmail-remote-password-required
가 설정되지 않았을 때 사용자가 POP 메일을 검색할 때마다 기본적으로 사용될 것이다.


일부 POP 서버들은 메시지를 역순으로 보관한다. 이런 경우에 사용자가 수신한 순으로 메일을 읽고 싶다면
rmail-movemail-flags
에 '
-r
' 플래그를 추가함으로써 메시지 다운로드 순을 바꿀 것을
movemail
에게 알린다.


Mailutils
movemail
은 TLS 암호화를 지원한다. 이 기능을 사용하려면 '
--tls
' 플래그를
rmail-movemail-flags
로 추가한다.


로컬 메일박스에서 다양한 포맷으로 된 메일 검색하기(Retrieving Mail from Local Mailboxes in Various Formats)

수신하는 메일이 Unix 메일박스 이외의 포맷으로 로컬 머신에 보관될 경우 검색에 Mailutils
movemail
이 필요할 것이다.
movemail
버전에 대한 상세한 설명은 375 페이지의 30.18절 [Movemail]을 참고한다. 가령
/var/spool/mail/in
에 위치하는
maildir
포맷의 인박스에 포함된 메일로 접근하고 싶다면 아래의 내용을 Rmail 인박스 목록에 포함시켜야 할 것이다:
maildir://var/spool/mail/in


Notes