Прикрепление ярлыков к сообщениям в Gmail через IMAP с помощью кода


Что касается ярлыков Gmail - каковы они с технической точки зрения. Я имею в виду, что через соединение imap я могу получить доступ к почтовому ящику gmail и просматривать электронные письма, однако позвольте сказать, что я хочу создать ярлык и прикрепить его к электронным письмам, когда я просматриваю их с помощью кода - как я могу сделать это в коде? Я использую php- и Zend-фреймворки.

РЕДАКТИРОВАТЬ===

Спасибо за ответы, поэтому теперь ясно, что ярлыки в этом отношении рассматриваются как папки, однако я пробовал Функции класса Zend_Mail_Storage_Imap с интересными результатами. Если я попробую функцию Zend_Mail_Storage_Imap:movemessage - она удаляет сообщение, где бы оно ни находилось, и буквально прикрепляет к нему ярлык, означающий, что если я хочу прикрепить ярлык foo к своему сообщению, он удаляет его из папки "Входящие" и прикрепляет ярлык foo. Однако, если я использую Zend_Mail_Storage_Imap::copymessage, это делает трюк.

Однако мне здесь интересно, не является ли это буквально дубликатом сообщения и в итоге вы получаете более одного дублирующего сообщения прямо здесь?

Также что делать, если мне нужно выбрать все сообщения, прикрепленные с определенной меткой или, в данном случае, в определенной папке?

Author: Ali, 2010-03-16

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
 11
Author: Larry K, 2010-03-16 15:14:28

Для PHP вы пробовали imap_mail_move?

Http://ro.php.net/manual/en/function.imap-mail-move.php

 3
Author: Greg, 2012-01-11 15:41:01

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

 2
Author: GreenKiwi, 2012-01-19 19:46:00

Я очень опаздываю на вечеринку здесь, но люди могут найти эту информацию у https://developers.google.com/gmail/imap_extensions полезно:

Gmail рассматривает ярлыки как папки для целей IMAP. Таким образом, метки могут быть изменены с помощью стандартных команд IMAP, CREATE, RENAME, и DELETE, которые действуют на папки. Системные метки, которые являются метками, созданными Gmail, зарезервированы и имеют префикс "[Gmail]" или "[Googlemail]" в списке меток. Используйте XLIST команда для получения полного списка меток для почтового ящика.

Метки для данного сообщения могут быть получены с помощью атрибута X-GM-LABELS с помощью команды FETCH. Атрибут возвращается в виде списка ASTRINGs, закодированного соответствующим образом в 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)
 0
Author: mc0e, 2015-08-19 14:28:52