使用代码通过IMAP将标签附加到Gmail中的邮件

时间:2010-03-16 14:42:36

标签: php email zend-framework gmail imap

关于Gmail标签 - 从技术角度讲它们是什么。我的意思是通过imap连接我可以访问gmail邮箱并浏览电子邮件但是我想创建一个标签并将其附加到电子邮件中,因为我使用代码循环它们 - 我怎么能在代码中执行此操作?我正在使用php - 和Zend Framework。

编辑===

感谢您的回复,所以现在很清楚标签在这方面被视为文件夹,但我已经尝试了Zend_Mail_Storage_Imap类函数和有趣的结果。如果我尝试Zend_Mail_Storage_Imap:moveMessage函数 - 它会从任何地方删除消息,并在字面上附加一个标签,这意味着如果我希望在我的消息中附加标签foo,则将其从收件箱中删除并附加标签foo。但是,如果我使用Zend_Mail_Storage_Imap :: copyMessage来实现这一目的。

但是我想知道这不会真正制作一条重复的邮件副本,而你最终会在这里发送多条重复邮件?

此外,如果我需要选择附加了某个标签的所有邮件,或者在这种情况下是否在某个文件夹中?

4 个答案:

答案 0 :(得分:11)

Re:关于Gmail标签 - 从技术角度讲它们是什么。

由于IMAP没有“标签”的概念,因此GMail“标签”与IMAP“文件夹”Here之间存在或多或少的映射,是我在其上找到的最佳文档。但真正帮助我创建与GMail的程序化IMAP交互的是实验。

例如,预设标签的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

答案 1 :(得分:3)

对于PHP,你试过imap_mail_move

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我来这里的派对很晚,但是人们可能会发现https://developers.google.com/gmail/imap_extensions的这些信息很有用:

  

Gmail会将标签视为用于IMAP的文件夹。因此,可以使用作用于文件夹的标准IMAP命令CREATERENAMEDELETE来修改标签。系统标签是由Gmail创建的标签,由" [Gmail]"保留并加上前缀。或者" [GoogleMail]"在标签列表中。使用XLIST命令获取邮箱的整个标签列表。

     

可以使用带有X-GM-LABELS命令的FETCH属性来检索给定消息的标签。该属性作为ASTRING的列表返回,以UTF-7编码。 ASTRING是RFC定义的atomstring

     

以下是使用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-LABELSSEARCH命令中使用UID SEARCH属性来查找具有给定标签的文件夹中所有邮件的序列号或UID s 。以下是使用SEARCH命令检索多个消息的序列号的调用的示例脚本:

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