5. Mutt의 MIME 지원

Mutt에서 MIME 사용을 위해서는 두가지 설정 파일이 필요한데, 각각 IANA MIME 형식을 매핑해 놓은 mime.types 와 각 MIME 형식에 대응하는 명령들을 지정하는 mailcap 이다.

5.1. Mutt에서 MIME 사용

Mutt에서는 pager, compose, 첨부물 메뉴에서 MIME을 처리 할 수 있다.

5.1.1. MIME 메일 보기

메일 인덱스와 읽기(pager)에서는 메일을 일반 텍스트로 디코딩 한다. mutt이 기본적으로 지원하는 MIME 형식은 text/plain, text/enriched, message/rfc822, message/news이다. 추가적으로 여러 형태의 PGP/MIME 과 application/pgp 같은 여러 형태의 PGP MIME을 지원한다.

mutt은 첨부물의 형식을 다음과 같은 형식으로 표시한다:
[-- Attachment #1: Description --]
[-- type: text/plain, Encoding: 7bit, Size: 10000 --]
Description 에는 첨부물에 대한 설명 또는 파일 이름이, Encoding 에는 7bit/8bit/quoted-printable/base64/binary중 하나가 표시된다.

만약 mutt이 MIME 형식을 처리하지 못하면 다음과 같이 표시한다:
[-- image/gif is unsupported (use 'v' to view this part) --]

5.1.2. 첨부물 메뉴

첨부물을 보기 위한 view-attachments 명령의 기본 키 설정은 `v' 이다. 첨부물 메뉴에서는 메일에 첨부된 첨부물의 목록을 보여주며, 저장, 프린트, pipe, 삭제, 보기등이 가능하다. 만약 여러개의 첨부물이 있다면 태그를 사용하여 모든 표시된 첨부물에 원하는 명령을 한번에 적용할 수도 있다.

당신은 이 메뉴에서 답장을 보내는 것도 가능하며, 이때 현재(또는 태그한) 첨부물을 본문에 인용한다.

각 첨부물은 텍스트 형태로 보거나, mailcap 에 설정한 외부 프로그램을 사용하여 볼수 있다.

또한 일반적으로 메일과 관련된 기능들(예를 들어 resend-message, 답장, 포워딩)에 message/rfc822 형식을 적용할 수 있다.

첨부물 메뉴에서 더 자세한 설명을 찾을수 있다.

5.1.3. 메일 작성 메뉴

compose 메뉴는 메일을 보내기 전에 볼수 있는 화면이다. 여기서는 수신자 목록, 제목, 본문등을 수정할 수 있으며, 보내려는 메일의 첨부물의 목록을 보여준다. 이 메뉴에서 각 첨부물에 대한 프린트, 복사, 필터, pipe, 수정, 작성, 다시보기, 이름 바꾸기등이 가능하다. 또한 첨부물의 정보나 인코딩, 설명의 수정도 가능하다.

첨부물은 다음과 같이 표시된다: - 1 [text/plain, 7bit, 1K] /tmp/mutt-euler-8082-0 <no description> 2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description>

'-' (마이너스) 기호는 mutt이 메일을 보낸후 (또는 발송 연기, 취소)에 삭제함을 의미한다. 이것은 toggle-unlink (기본: u)로 바꿀수 있다. 다음 필드는 MIME 형식이며, 이것은 edit-type (기본: ^T)로 수정할 수 있다. 다음은 첨부물의 인코딩 방식으로 edit-encoding (기본: ^E)로 수정 가능하다. 다음 필드는 첨부물의 크기로 kilobyte나 megabyte로 표시된다. 그 다음은 파일 이름으로 rename-file (기본: R)으로 수정 가능하다. 마지막 필드는 첨부물의 설명이며 수정은 edit-description (기본: d)로 한다.

5.2. mime.types 파일에 MIME 형식 설정

메일에 첨부물을 추가할때 mutt은 순서대로 ${HOME}/.mime.types, /usr/local/share/mutt/mime.types 또느 /etc/mime.types를 찾게 된다.

mime.types 파일은 MIME 형식과 확장자로 기술한다:
application/postscript          ps eps
application/pgp                 pgp
audio/x-aiff                    aif aifc aiff
예제 mime.types 파일은 Mutt 배포본에 포함되어 있으며 여기에는 여러분이 사용하는 대부분의 MIME 형식이 들어있다.

만약 첨부되는 파일의 형식을 인식하지 못하면 mutt은 파일을 직접 살펴보고 바이너리 정보가 없다면 일반 텍스트로 인식하고 text/plain로 표시할 것이다. 만약 첨부물이 바이너리 정보를 포함한다면, application/octet-stream로 표시한다. mutt이 결정한 MIME 형식은 edit-type (기본: ^T)를 사용해 변경할 수 있다.

5.3. mailcap 파일에 외부 프로그램 설정

mutt은 RFC 1524에 의한 일반적인 mailcap 파일 형식을 지원한다. 이 mailcap 파일은 Mutt이외에도 MIME을 지원하는 다른 프로그램들에 의해 사용된다 (예: Netscape, XMosaic, lynx, metamail).

mutt은 이 파일을 사용해서 내부적으로 처리하지 못하는 MIME 형식의 파일을 처리 하게되며, 다음과 같은 순서로 이 파일을 찾게된다.
${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
$HOME 은 당신의 홈 디렉토리이다.

metamail 패키지에는 보통 mailcap 파일을 포함하고 있으며 /usr/local/etc/mailcap에 설치된다.

5.3.1. mailcap 파일의 기본

기본적은 형식으로 text/plain 메세지를 more 로 연결하려면:
text/plain; more
메세지를 파일로 보내기:
text/plain; more %s
text/html 형식의 메세지를 lynx 로 보기:
text/html; lynx %s
이 경우, lynx는 stdin 으로 부터 직접 보기는 불가능하므로, 반듯이 %s 를 사용해야 한다.

주의: 몇몇 오래된 버전의 lynx는 text/html 형식의 파일을 볼때 mailcal 파일을 참고하는 버그가 있다. 결과적으로 lynx가 다시 lynx를 무한적으로 부르게 된다.

다음과 같이 lynx를 사용해서 text/html 형식을 text/plain으로 변환하는 방법도 있다:
text/html; lynx -dump %s | more

text/html 파일은 lynx로 보고, 나머지 모든 text 형식은 more 를 사용한다면:
text/html; lynx %s
text/*; more
이것은 가장 간단한 형태의 mailcap 파일이다.

5.3.2. mailcap 의 안전한 사용

MIME 변수에 포함된 쉘 문자들로 인해 보안상 문제를 일으킬수도 있다.

mutt은 이 위험에서 벗어나기 위해 위험한 문자들을 인용문자로 감싸는 방법을 사용한다. mailcap-sanitize를 참조.

Mutt와 mailcap에 의해 실행되는 프로그램은 안전할 수 있으나, mailcap을 사용하는 다른 프로그램들을 위해서 다음 예를 참고하라:

text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1

5.3.3. 향상된 mailcap 사용법

5.3.3.1. 옵션 필드

content-type 과 view 명령 필드에는 추가적인 옵션을 사용 하는데, 각 옵션들은 ';'로 분리해서 나열할 수 있다. mutt은 다음과 같은 옵션들을 인식한다:

copiousoutput

이 플래그는 결과를 내장 페이저(또는 외부)에서 볼때 사용한다. 다음 예를 참고하라:
text/html; lynx -dump %s ; copiousoutput
이것은 lynx로 하여금 text/html를 text/plain로 변환하여 출력한뒤 mutt의 기본 내장 페이저에서 표시하도록 할것이다.

needsterminal

첨부물의 MIME 자동보기시에 사용되는 옵션으로, 외부 프로그램의 실행이 종료된후 wait-key변수를 적용할 것인지를 결정하게 된다.

compose=<command>

지정된 MIMT 형식의 첨부물을 만들때 사용되는 명령어를 지정해 준다. 메일 작성(compose) 메뉴에서 사용된다.

composetyped=<command>

compose 옵션과 같은 용도로 사용되나, mutt은 표준 MIME 헤더를 기대할 것이다. 이것은 지정된 변수, 파일명, 설명들이 될 수 있다. 메일 작성(compose) 메뉴에서 사용된다.

print=<command>

지정된 MIME 형식의 프린트시 사용되는 명령어. 첨부물(attachment), 메일 작성(compose) 메뉴에서 사용된다.

edit=<command>

지정된 MIME 형식을 편집할때 사용되는 명령어.

nametemplate=<template>

이 필드는 %s에 의해 나타내는 파일의 형식을 지정한다. 이것은 어떤 프로그램들은 파일의 확장자로 파일의 형식을 인식하기 때문에 사용된다. 예를 들어, lynx는 .html로 끝나는 파일명을 가진 파일만을 text/html로 표시한다. 따라서, mailcap 파일의 내용은 다음과 같다:
text/html; lynx %s; nametemplate=%s.html

test=<command>

이 필드는 해당 명령어를 조건에 따라 실행 할것인지 먼저 테스트하는데 사용된다. 만약 결과값이 0이 아니라면 명령을 실행하지 않고 다음 적합한 목록을 찾게된다. 다음 예를 보라:
text/html; netscape -remote 'openURL(%s)' ; test=RunningX
text/html; lynx %s
이 예제는 mutt이 먼저 RunningX를 실행하여 그 결과가 0 이면 X가 실행 중이므로, netscape을 실행하고 0이 아니라면 lynx를 사용할 것이다.

5.3.3.2. 검색 순서

mailcap 내용을 검색할때 mutt은 그 목적에 가장 적합한 것을 사용하게 된다. 예를 들어 image/gif를 프린트 하려 한다면, print 명령을 가진 mailcap 내용을 사용하게 된다:
image/*;        xv %s
image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
                nametemplate=%s.gif
Mutt은 image/*는 무시하고 image/gif를 print 명령으로 사용한다.

다음 예와 같이 MIME 자동보기와 첨부물 보기등을 위해 한가지 MIME 형식에 따라 몇가지 명령을 설정해 줄수 있다.
text/html;      netscape -remote 'openURL(%s)' ; test=RunningX
text/html;      lynx %s; nametemplate=%s.html
text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput
MIME 자동보기를 위해 mutt은 세번째 명령을 사용할 것이다. 이유는 copiousoutput 태그가 있기 때문이다. 대화형 보기시에는 첫번째와 두번째 설정을 시도할 것이다.

5.3.3.3. 명령 확장(Command Expansion)

mailcap 파일안의 명령어에 mutt은 다음과 같은 변수를 전달해 줄수 있다:

%s

해당 프로그램에 파일 이름을 전달할때 사용한다. 이 파일의 내용은 메일의 본문이다.

%t

%t는 메일 내용의 형식을 mailcap 정의의 첫번째 변수와 같이 표현한다 (예: text/html, image/gif).

%{<parameter>}

지정된 Content-type:의 변수를 나타낸다. 예를 들어 메일의 헤더가 다음과 같다면:
Content-type: text/plain; charset=iso-8859-1
%{charset}는 iso-8859-1가 될것이다.

\%

이것은 %로 바뀔것이다.

mutt은 현재 RFC 1524에 명시되어 있는 %F 와 %n 키워드를 지원하지 않는데, 이것은 이 변수들이 이미 Mutt에서 내부적으로 지원하고 있는 multipart 메세지를 위한 것이기 때문이다.

5.3.4. 예제 mailcap 파일

기본적인 예:
# 나는 X를 항상 실행하고 있어요!
video/*;        xanim %s > /dev/null
image/*;        xv %s > /dev/null

# netscape가 항상 실행되고 있음
text/html;      netscape -remote 'openURL(%s)'

다음은 내가 쓰는 mailcap 파일로 몇가지 사용 예를 보여준다:
# 비디오 관련 파일을 xanim을 사용하여 본다. xanim가 실행될때의 
# 메세지는 /dev/null 로 보낸다.
video/*;        xanim %s > /dev/null

# html은 실행중인 netscape으로 보냄.
text/html;      netscape -remote 'openURL(%s)'; test=RunningNetscape

# netscape 가 실행되고 있지 않다면 실행한다.
text/html;      netscape %s; test=RunningX

# X 가 실행되고 있지 않은 경우 lynx 를 사용
text/html;      lynx %s

# text/html 를 text/plain로 변환해서 보기
text/html;      lynx -dump %s; copiousoutput

# enriched.sh 스크립트로 text/enriched를 text/html로 변환
text/enriched;  enriched.sh ; copiousoutput

# 프린트시 enscript를 사용해서 컬럼을 나누기
text/*;         more %s; print=enscript -2Gr %s

# Netscape adds a flag to tell itself to view jpegs internally
image/jpeg;xv %s; x-mozilla-flags=internal

# X가 실행중인 경우 xv로 이미지 파일 보기
image/*;xv %s; test=RunningX; \
        edit=xpaint %s

# netpbm 툴을 사용해서 이미지를 텍스트로 변환하기
image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
pbmtoascii -1x2 ) 2>&1 ; copiousoutput

# 엑셀 파일을 NT 박스로 보내기
application/ms-excel; open.pl %s

5.4. MIME 자동 보기

이 기능을 사용하면 페이저에서 MIME 첨부물을 자동으로 볼수 있다.

이것이 작동하려면 mailcap 파일에서 사용되는 외부 프로그램에 copiousoutput 옵션을 사용해야 한다. 일반적으로 페이저에서 볼수 있는 것은 텍스트 형태로 변환된 것이다.

muttrc에 auto_view 명령을 사용하면 원하는 형식의 파일을 자동으로 볼수 있다.

예:
auto_view text/html text/enriched application/x-gunzip application/postscript image/gif application/x-tar-gz

mailcap 파일에 각 MIME 형식에 따라 사용할 외부 프로그램을 설정해준다.
text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
text/enriched;  enriched.sh  ; copiousoutput
image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput
application/x-gunzip;   gzcat; copiousoutput
application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
application/postscript; ps2ascii %s; copiousoutput

5.5. MIME Multipart/Alternative

mutt은 multipart/alternative 형태의 MIME을 표시를 위해 먼저 alternative_order 목록을 확인하게 된다. 다음은 alternative_order 목록의 예이다:
alternative_order text/enriched text/plain text application/postscript image/*

다음, mutt은 MIME 자동보기의 정의된 형태를 확인하고, 실패하면 텍스트 형태를, 그리고 마지막으로 어떻게 다루어져야 하는지 알고 있는 형태를 시도하게 된다.