"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'})
