mailcap — Mailcap 파일 처리

소스 코드: Lib/mailcap.py

버전 3.11부터 폐지: The mailcap module is deprecated (see PEP 594 for details). The mimetypes module provides an alternative.


Mailcap 파일은 메일 리더와 웹 브라우저와 같은 MIME 인식 응용 프로그램이 MIME 형식의 파일에 따라 반응하는 방식을 구성하는 데 사용됩니다. (“mailcap” 이라는 이름은 “mail capability” 라는 구문에서 왔습니다.) 예를 들어, mailcap 파일에는 video/mpeg; xmpeg %s와 같은 줄이 있을 수 있습니다. 그러면, 사용자가 MIME 유형이 video/mpeg 인 전자 메일 메시지 또는 웹 문서를 만나면, %s가 파일명(대개 임시 파일에 속한 파일)으로 치환되고 xmpeg 프로그램을 자동으로 시작하여 파일을 볼 수 있습니다.

mailcap 형식은 RFC 1524, “A User Agent Configuration Mechanism For Multimedia Mail Format Information”에 설명되어 있지만, 인터넷 표준은 아닙니다. 그러나, mailcap 파일은 대부분 유닉스 시스템에서 지원됩니다.

mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])

2-튜플을 반환합니다; 첫 번째 요소는 실행될 명령 줄(os.system()에 전달될 수 있음)을 포함하는 문자열이고, 두 번째 요소는 지정된 MIME 유형에 대한 mailcap 항목입니다. 일치하는 MIME 유형을 찾을 수 없으면 (None, None)이 반환됩니다.

key는 원하는 이름인데, 수행할 활동의 유형을 나타냅니다; 가장 흔히 MIME 형식의 데이터 본문을 보고만 싶으므로 기본값은 ‘view’ 입니다. 주어진 MIME 유형의 새 본문을 만들거나 기존 본문 데이터를 변경하려고 할 때, 다른 가능한 값으로 ‘compose’ 이나 ‘edit’ 가 있습니다. 이 필드의 전체 목록은 RFC 1524를 참조하십시오.

filename은 명령 줄에서 %s에 치환될 파일명입니다. 기본값은 '/dev/null' 이지만, 거의 확실하게 원하는 것이 아닐 것이기 때문에, 보통 파일명을 지정하여 이를 대체합니다.

plist는 이름있는 매개 변수를 포함하는 리스트일 수 있습니다; 기본값은 단순히 빈 리스트입니다. 리스트의 각 항목은 매개 변수 이름, 등호('=') 및 매개 변수의 값이 포함된 문자열이어야 합니다. Mailcap 항목은 %{foo}와 같은 이름있는 매개 변수를 포함할 수 있는데, ‘foo’ 라는 이름의 매개 변수의 값으로 치환됩니다. 예를 들어, 명령 줄 showpartial %{id} %{number} %{total}이 mailcap 파일에 있고, plist['id=1', 'number=2', 'total=3']로 설정되었으면, 결과 명령 줄은 'showpartial 1 2 3'가 됩니다.

mailcap 파일에서, “test” 필드를 선택적으로 지정하여 mailcap 줄이 적용되는지를 판단하기 위해 일부 외부 조건(가령 기계 아키텍처나 사용 중인 윈도우 시스템)을 검사할 수 있습니다. findmatch()는 자동으로 그러한 조건을 검사하고 검사가 실패하면 항목을 건너뜁니다.

버전 3.9.16에서 변경: To prevent security issues with shell metacharacters (symbols that have special effects in a shell command line), findmatch will refuse to inject ASCII characters other than alphanumerics and @+=:,./-_ into the returned command line.

If a disallowed character appears in filename, findmatch will always return (None, None) as if no entry was found. If such a character appears elsewhere (a value in plist or in MIMEtype), findmatch will ignore all mailcap entries which use that value. A warning will be raised in either case.

mailcap.getcaps()

MIME 유형을 mailcap 파일 항목 리스트에 매핑하는 딕셔너리를 반환합니다. 이 딕셔너리는 findmatch() 함수에 전달되어야 합니다. 항목은 딕셔너리의 리스트로 저장되지만, 이 표현의 세부 사항을 알 필요는 없습니다.

이 정보는 시스템에서 발견된 모든 mailcap 파일에서 파생됩니다. 사용자의 mailcap 파일 $HOME/.mailcap의 설정은 시스템 mailcap 파일 /etc/mailcap, /usr/etc/mailcap/usr/local/etc/mailcap의 설정보다 우선합니다.

사용 예:

>>> import mailcap
>>> d = mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})