Прикрепление ярлыков к сообщениям в Gmail через IMAP с помощью кода
Что касается ярлыков Gmail - каковы они с технической точки зрения. Я имею в виду, что через соединение imap я могу получить доступ к почтовому ящику gmail и просматривать электронные письма, однако позвольте сказать, что я хочу создать ярлык и прикрепить его к электронным письмам, когда я просматриваю их с помощью кода - как я могу сделать это в коде? Я использую php- и Zend-фреймворки.
РЕДАКТИРОВАТЬ===
Спасибо за ответы, поэтому теперь ясно, что ярлыки в этом отношении рассматриваются как папки, однако я пробовал Функции класса Zend_Mail_Storage_Imap с интересными результатами. Если я попробую функцию Zend_Mail_Storage_Imap:movemessage - она удаляет сообщение, где бы оно ни находилось, и буквально прикрепляет к нему ярлык, означающий, что если я хочу прикрепить ярлык foo к своему сообщению, он удаляет его из папки "Входящие" и прикрепляет ярлык foo. Однако, если я использую Zend_Mail_Storage_Imap::copymessage, это делает трюк.
Однако мне здесь интересно, не является ли это буквально дубликатом сообщения и в итоге вы получаете более одного дублирующего сообщения прямо здесь?
Также что делать, если мне нужно выбрать все сообщения, прикрепленные с определенной меткой или, в данном случае, в определенной папке?
4 answers
Re: что касается ярлыков Gmail - каковы они с технической точки зрения.
Поскольку в IMAP нет понятия "ярлыки", существует более или менее сопоставление между "ярлыками" GMAIL и "папками" IMAP Здесь лучший документ, который я нашел на нем. Но что действительно помогло мне в создании моего программного взаимодействия IMAP с Gmail, так это эксперименты.
Например, предустановленные метки имеют имена папок IMAP
Human name -- IMAP Folder name
Drafts -- [Gmail]/Drafts
Sent Mail -- [Gmail]/Sent Mail
Spam -- [Gmail]/Spam
Starred -- [Gmail]/Starred
Trash -- [Gmail]/Trash
Добавлено --
Повторно: создайте ярлык и прикрепите его к электронным письмам, когда я просматриваю их с помощью кода - как я могу сделать это в коде?
Чтобы создать метку, используйте операцию Imap "создать папку".
Используйте операцию копирования Imap, чтобы добавить метку к сообщению.
Чтобы удалить сообщение из папки "Входящие" Gmail, я на 90% уверен, что вы добавите флаг IMAP "Удалено". -- Но, пожалуйста, сначала поэкспериментируйте с этим. Мне не ясно, какие метки удаляются при установке флага "удалено". В моих тестах в сообщении было только 1 метка (Входящие), когда я применил удаленный флаг.
Вот код, который я использую для перемещения сообщения GMail из папки "Входящие" в папку "Корзина":
# Ruby code...
imap.store(message_id, "+FLAGS", [:Deleted]) # rm inbox label
imap.copy(message_id, "[Gmail]/Trash") # add trash label
Для PHP вы пробовали imap_mail_move
?
Gmail поддерживает хранение меток для каждого сообщения:
a011 STORE 1 +X-GM-LABELS (foo)
* 1 FETCH (X-GM-LABELS (\Inbox \Sent Important "Muy Importante" foo))
a011 OK STORE (Success)
С их сайта инструментов API: http://code.google.com/apis/gmail/imap/#x-gm-labels
Я очень опаздываю на вечеринку здесь, но люди могут найти эту информацию у https://developers.google.com/gmail/imap_extensions полезно:
Gmail рассматривает ярлыки как папки для целей IMAP. Таким образом, метки могут быть изменены с помощью стандартных команд IMAP,
CREATE
,RENAME
, иDELETE
, которые действуют на папки. Системные метки, которые являются метками, созданными Gmail, зарезервированы и имеют префикс "[Gmail]" или "[Googlemail]" в списке меток. ИспользуйтеXLIST
команда для получения полного списка меток для почтового ящика.Метки для данного сообщения могут быть получены с помощью атрибута
X-GM-LABELS
с помощью командыFETCH
. Атрибут возвращается в виде спискаASTRING
s, закодированного соответствующим образом в UTF-7.ASTRING
- это атом или строка, как определено в RFC.Ниже приведен пример расшифровки вызова для получения
X-GM-LABELS
нескольких сообщений с помощью командыFETCH
:
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)