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 속성 이름과 비슷하지만 동일하지는 않습니다.

SEARCH 명령어 확장: 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 속성은 SEARCH 또는 UID SEARCH 명령어에서 Gmail의 메일 ID를 사용하여 메일의 시퀀스 번호 또는 UID를 찾는 데도 사용할 수 있습니다. 다음은 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 속성은 SEARCH 또는 UID SEARCH 명령어에서 특정 대화목록의 메시지 시퀀스 번호 또는 UID를 찾는 데도 사용할 수 있습니다. 다음은 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 명령어를 사용하여 우편함의 전체 라벨 목록을 가져옵니다.

FETCH 명령어와 함께 X-GM-LABELS 속성을 사용하여 특정 메시지의 라벨을 가져올 수 있습니다. 이 속성은 ASTRING 목록으로 반환되며 필요에 따라 UTF-7로 인코딩됩니다. 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)

참조