이 문서에서는 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
속성을 사용하여 특정 메시지의 라벨을 가져올 수 있습니다. 이 속성은 적절하게 UTF-7로 인코딩된 ASTRING
목록으로 반환됩니다. ASTRING
는 RFC에 정의된 원자 또는 문자열입니다.
다음은 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)
참조
- IMAP: RFC 3501: 인터넷 메시지 액세스 프로토콜 - 버전 4rev1
- IMAP ID: RFC 2971: IMAP4 ID 확장
- IMAP 특수 용도: RFC 6154: 특수 용도 메일함을 위한 IMAP LIST 확장