Прикрепление ярлыков к сообщениям в Gmail через IMAP с использованием кода - PullRequest
4 голосов
/ 16 марта 2010

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

EDIT ===

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

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

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

Ответы [ 4 ]

11 голосов
/ 16 марта 2010

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

Добавлено--

Re: создайте ярлык и прикрепите его к электронным письмам, когда я перебираю их с помощью кода - как я могу это сделать в коде?

Чтобы создать метку, используйте операцию 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
3 голосов
/ 17 марта 2010

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

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

2 голосов
/ 19 января 2012

Gmail поддерживает хранение меток для каждого сообщения:

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

Со своего сайта API Tools: http://code.google.com/apis/gmail/imap/#x-gm-labels

0 голосов
/ 19 августа 2015

Я очень опаздываю на вечеринку, но люди могут найти эту информацию из 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 s всех сообщений в папке с данной меткой. Ниже приведен пример стенограммы вызова для получения порядковых номеров нескольких сообщений с помощью команды SEARCH:

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