IMAP 확장 프로그램

이 문서에서는 Gmail에서 제공하는 IMAP 확장 프로그램과 개발자가 이를 사용할 수 있는 방법을 설명합니다. 이 문서에서는 IMAP 프로토콜에 익숙하다고 가정합니다.

개요

Gmail은 IMAP 클라이언트 작성자가 IMAP을 통해 Gmail과 유사한 환경을 제공할 수 있도록 IMAP 확장 프로그램을 제공합니다. Gmail 기능을 웹 또는 모바일 앱에 통합하는 개발자는 RESTful Gmail API를 사용할 수 있습니다.

표준 IMAP 프로토콜을 통해 Gmail에 액세스하거나 OAuth를 통해 연결할 때 확장 프로그램을 사용할 수 있습니다.

확장 프로그램이 있는지 확인

Gmail은 CAPABILITY 명령어에 대한 응답에서 확장 프로그램 지원을 알립니다. 이 문서의 확장 프로그램 지원은 지원되는 기능 목록에 X-GM-EXT-1를 통해 표시됩니다.

클라이언트는 IMAP ID 명령어 (RFC 2971)를 사용하여 스스로 공지하고, 이러한 확장 프로그램을 변경해야 하는 경우 대체 수단으로 연락처 주소를 포함하는 것이 좋습니다.

다음은 Gmail IMAP 엔드포인트에서 CAPABILITY 명령어를 사용하는 경우와 핸드셰이크를 사용하는 예입니다.

* OK Gimap ready for requests from 127.0.0.1 k2if6111336rvb.0
a001 LOGIN username@gmail.com password
a001 OK username@gmail.com authenticated (Success)
a001 OK Login successful
a002 CAPABILITY
* CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1
a002 OK Success
a003 ID ("name" "clientname" "version" "1.2.3" "vendor" "companyname" "contact" "foo@example.com")
* ID ("name" "GImap" "vendor" "Google, Inc." "support-url" "http://mail.google.com/support" "remote-host" "127.0.0.1")
a003 OK Success

LIST 명령어의 특수 용도 확장

Gmail은 특수 폴더에 새로운 속성을 제공하는 특수 편지함용 IMAP LIST 확장 프로그램을 지원합니다. 이러한 속성을 통해 클라이언트는 어떤 폴더가 특별한지 (예: \All). 현재 특수 폴더 목록은 중요편지함, 중요편지함, 보낸편지함, 임시보관함, 스팸함, 전체보관함 및 휴지통으로 구성되어 있습니다. 모든 LIST 응답에는 이러한 특수 사용 속성이 포함되어 있습니다. 이는 새로운 CAPABILITY이 아니며 클라이언트가 ENABLEd해야 하는 항목이 아닙니다.

다음은 LIST 호출의 스크립트 예입니다.

a004 LIST "" "*"
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\Noselect \HasChildren) "/" "[Gmail]"
* LIST (\HasNoChildren \All) "/" "[Gmail]/All Mail"
* LIST (\HasNoChildren \Drafts) "/" "[Gmail]/Drafts"
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
* LIST (\HasNoChildren \Flagged) "/" "[Gmail]/Starred"
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"
a004 OK Success

응답은 Gmail의 중요 받은편지함 (예: "[Gmail]/Important")에 \Important 속성이 추가된 특수 사용 표준을 따릅니다.

XLIST 지원 중단됨

Gmail 관련 XLIST 명령어는 2013년에 지원 중단되었으며 IMAP 특수 사용 목록 표준으로 대체되었습니다. 고객은 최대한 빨리 XLIST에서 특수 용도 업계 표준으로 이전하는 것이 좋습니다. 특수 사용 표준 속성 이름은 기존 XLIST 속성 이름과 비슷하지만 동일하지는 않습니다.

검색 명령어의 확장 프로그램: X-GM-RAW

전체 Gmail 검색 구문에 대한 액세스를 제공할 수 있도록 Gmail은 X-GM-RAW 검색 속성을 제공합니다. SEARCH 또는 UID SEARCH 명령어를 실행할 때 X-GM-RAW 속성과 함께 전달된 인수는 Gmail 웹 인터페이스와 같은 방식으로 해석됩니다.

다음은 X-GM-RAW 속성을 사용한 SEARCH 호출의 스크립트 예입니다.

a005 SEARCH X-GM-RAW "has:attachment in:unread"
* SEARCH 123 12344 5992
a005 OK SEARCH (Success)

Gmail 고유 메일 ID에 대한 액세스: X-GM-MSGID

Gmail은 각 이메일의 고유한 메일 ID를 제공하므로 여러 폴더에서 고유한 메일을 식별할 수 있습니다. 이 메시지 ID는 FETCH 명령어의 X-GM-MSGID 속성을 통해 검색할 수 있습니다. 메시지 ID는 부호 없는 64비트 정수이며 웹 인터페이스 및 Gmail API에 사용되는 ID 16진수 문자열에 해당하는 십진수입니다.

다음은 FETCH 명령어를 사용하여 메시지의 X-GM-MSGID를 검색하는 호출의 스크립트 예시입니다.

a006 FETCH 1 (X-GM-MSGID)
* 1 FETCH (X-GM-MSGID 1278455344230334865)
a006 OK FETCH (Success)

X-GM-MSGID 속성은 Gmail 메시지 ID가 지정된 메시지의 순서 번호 또는 UID를 찾기 위해 SEARCH 또는 UID SEARCH 명령어에 사용될 수도 있습니다. 다음은 UID SEARCH 명령어를 사용하여 메시지의 UID를 검색하는 호출의 스크립트 예시입니다.

a007 UID SEARCH X-GM-MSGID 1278455344230334865
* SEARCH 1
a007 OK SEARCH (Success)

Gmail 대화목록 ID에 대한 액세스: X-GM-THRID

Gmail은 Gmail 웹 인터페이스와 같은 방식으로 메일 그룹을 연결하는 대화목록 ID를 제공합니다. 이 스레드 ID의 검색은 FETCH 명령어의 X-GM-THRID 속성을 통해 지원됩니다. 스레드 ID는 부호 없는 64비트 정수이며 웹 인터페이스 및 Gmail API에 사용되는 ID 16진수 문자열에 해당하는 십진수입니다.

다음은 FETCH 명령어를 사용하여 (두 스레드에서) 여러 메시지의 X-GM-THRID를 검색하는 호출의 스크립트 예시입니다.

a008 FETCH 1:4 (X-GM-THRID)
* 1 FETCH (X-GM-THRID 1278455344230334865)
* 2 FETCH (X-GM-THRID 1266894439832287888)
* 3 FETCH (X-GM-THRID 1266894439832287888)
* 4 FETCH (X-GM-THRID 1266894439832287888)
a008 OK FETCH (Success)

X-GM-THRID 속성은 지정된 스레드 내 메시지의 순서 번호나 UID를 찾기 위해 SEARCH 또는 UID SEARCH 명령어에 사용될 수도 있습니다. 다음은 UID SEARCH 명령어를 사용하여 여러 메시지의 UID를 검색하는 호출의 스크립트 예시입니다.

a009 UID SEARCH X-GM-THRID 1266894439832287888
* SEARCH 2 3 4
a009 OK Search (Success)

Gmail 라벨에 액세스: X-GM-LABELS

Gmail은 IMAP을 위해 라벨을 폴더로 취급합니다. 따라서 라벨은 폴더에서 작동하는 표준 IMAP 명령어(CREATE, RENAME, DELETE)를 사용하여 수정할 수 있습니다. Gmail에서 만든 라벨인 시스템 라벨은 예약되어 있으며 라벨 목록에서 '[Gmail]' 또는 '[GoogleMail]'로 시작합니다. XLIST 명령어를 사용하여 편지함의 전체 라벨 목록을 가져옵니다.

특정 메시지의 라벨은 X-GM-LABELS 속성을 FETCH 명령어와 함께 사용하여 가져올 수 있습니다. 이 속성은 적절한 UTF-7로 인코딩된 ASTRING 목록으로 반환됩니다. ASTRING은 RFC에 정의된 atom 또는 문자열입니다.

다음은 FETCH 명령어를 사용하여 여러 메시지의 X-GM-LABELS를 검색하는 호출의 스크립트 예시입니다.

a010 FETCH 1:4 (X-GM-LABELS)
* 1 FETCH (X-GM-LABELS (\Inbox \Sent Important "Muy Importante"))
* 2 FETCH (X-GM-LABELS (foo))
* 3 FETCH (X-GM-LABELS ())
* 4 FETCH (X-GM-LABELS (\Drafts))
a010 OK FETCH (Success)

STORE 명령어를 X-GM-LABELS 속성과 함께 사용하여 메시지에 라벨을 추가할 수 있습니다. 다음은 메시지에 라벨을 추가하는 방법을 보여주는 스크립트의 예입니다.

a011 STORE 1 +X-GM-LABELS (foo)
* 1 FETCH (X-GM-LABELS (\Inbox \Sent Important "Muy Importante" foo))
a011 OK STORE (Success)

X-GM-LABELS 속성은 SEARCH 또는 UID SEARCH 명령어에도 특정 라벨이 있는 폴더에 있는 모든 메시지의 순서 번호 또는 UID을 찾는 데 사용할 수 있습니다. 다음은 SEARCH 명령어를 사용하여 여러 메시지의 시퀀스 번호를 검색하는 호출의 스크립트 예시입니다.

a012 SEARCH X-GM-LABELS foo
* SEARCH 1 2
a012 OK SEARCH (Success)

참조