所以这是一个imap_header
转储......
$header = imap_header($mbox,$cms->page2);
stdClass对象( [date] =>星期二,2013年6月11日19:12:28 -0700 [日期] =>星期二,2013年6月11日19:12:28 -0700 [subject] =>帐户darnhippies.org论坛被锁定 [主题] =>帐户darnhippies.org论坛被锁定 [message_id] => < 201306120228.417bc449d097@www.darnhippies.org> [toaddress] => webmaster@example.com [to] =>排列 ( [0] => stdClass对象 ( [mailbox] =>网站管理员 [host] => example.com )
) [fromaddress] => "darnhippies.org Forum" <webmaster@darnhippies.org> [from] => Array ( [0] => stdClass Object ( [personal] => darnhippies.org Forum [mailbox] => webmaster [host] => darnhippies.org ) ) [reply_toaddress] => "darnhippies.org Forum" <webmaster@darnhippies.org> [reply_to] => Array ( [0] => stdClass Object ( [personal] => darnhippies.org Forum [mailbox] => webmaster [host] => darnhippies.org ) ) [senderaddress] => "darnhippies.org Forum" <webmaster@darnhippies.org> [sender] => Array ( [0] => stdClass Object ( [personal] => darnhippies.org Forum [mailbox] => webmaster [host] => darnhippies.org ) ) [Recent] => [Unseen] => [Flagged] => [Answered] => [Deleted] => [Draft] => [Msgno] => 22 [MailDate] => 11-Jun-2013 20:12:29 -0600 [Size] => 2008 [udate] => 1371003149
我一直试图通过使用$header->Msgno
作为消息ID进行移动,我认为因为没有消息移动了这不是正确的id。
那么我使用(在此示例中)$header->message_id
作为要移动的消息的ID吗?
我试过......
$result1 = imap_mail_move($mbox,'<201306120228.417bc449d097@www.darnhippies.org>','Inbox.Trash');
$result1 = imap_mail_move($mbox,'201306120228.417bc449d097@www.darnhippies.org','Inbox.Trash');
$result1 = imap_mail_move($mbox,'<201306120228.417bc449d097@www.darnhippies.org>','Inbox.Trash',CP_UID);
$result1 = imap_mail_move($mbox,'201306120228.417bc449d097@www.darnhippies.org','Inbox.Trash',CP_UID);
$result1 = imap_mail_move($mbox,'<201306120228.417bc449d097@www.darnhippies.org>','Inbox.Trash','CP_UID');
$result1 = imap_mail_move($mbox,'201306120228.417bc449d097@www.darnhippies.org','Inbox.Trash','CP_UID');
我也尝试使用完整的收件箱名称,包括服务器地址,因为。
我在90%的时间内得到以下错误......
$boxes = imap_getmailboxes($mbox, "{mail.example.com}", "*");
print_r($boxes);
错误:数组( [0] =&gt; IMAP协议错误:IMAP命令出错COPY:无效的消息集 [1] =&gt; IMAP命令出错COPY:无效的消息集)
那么如何找到正确的消息ID?
什么是UID?
我知道我可以传递逗号分隔的id列表,我只是想先移动一条消息。
答案 0 :(得分:1)
John,您应该使用邮件UID
来确保您引用了正确的电子邮件。 msgno是一个序列号,随着在邮箱中添加和删除电子邮件而更改。你在php(使用php imap库)中得到一条消息UID
:
$uid = imap_uid(*mailbox stream handle*, *msgno*);
结果$ uid在邮箱中永远是唯一的。
当您使用UID移动/读取/无论何种消息时,您需要为传递给相关函数的参数添加一个选项,以表明您使用的是UID而不是msgno,例如:
$body = imap_fetchbody(*stream handle*, $uid, *mime-type*, FT_UID);
FT_UID
是一个常量,告诉imap库第二个参数是UID
而不是msgno
。
关于imap库,php.net文档非常好,值得一读。
如果发件人遇到相关的RFC,
很明显,对于全球所有电子邮件,message_id应该是唯一的答案 1 :(得分:0)
在IMAP中,每条消息都有两个标识符:消息序列号(我假设它是PHP中的msgNo)和唯一ID(UID)。在邮箱中添加和删除邮件时,邮件序列号可能会更改,但UID在邮件生命周期内是永久性的。
您使用的字符串是来自电子邮件的Message-Id标头的“Message-Id”,不能用于移动邮件(例如,它不一定是唯一的)。如果你有UID,你应该可以使用带有UID修饰符标志的imap_mail_move来移动消息。
(我不熟悉PHP API,但也许您可以将UID修饰符标志传递给message_header以在结果集中获取UID。)
*:只要文件夹的UIDVALIDITY没有改变,只要该文件夹没有被删除并且使用相同的名称重新创建,它就不应该更改。