这是imap_header
转储…
$header = imap_header($mbox,$cms->page2);
stdClass Object ([date] => Tue, 11 june 2013 19:12:28 -0700[Date] => Tue, 11 june 2013 19:12:28 -0700[subject] => darnhippies.org论坛账户被锁定[主题]=> darnhippies.org论坛账户被锁定[message_id] => <201306120228.417bc449d097@www.darnhippies.org>[toaddress] => webmaster@example.com[to] =>数组([0] => stdClass对象([邮箱]=>网站管理员[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);
Error: Array ([0] => IMAP protocol error: error in IMAP command COPY: Invalid messageset[1] => IMAP命令出错
那么我如何找到正确的消息id?
什么是UID?
我知道我可以传递一个逗号分隔的id列表,我只是想先移动一个消息
John,您应该使用消息的UID
来确保您引用的是正确的电子邮件。msgno是一个序列号,随着从邮箱中添加和删除电子邮件而更改。您可以使用以下命令(使用php imap库)在php中获得消息的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的
在IMAP中,每个消息都有两个标识符:消息序列号(我假设在PHP中是msgNo)和唯一ID (UID)。消息序列号可以随着消息的添加和从邮箱中删除而更改,但是UID在消息的生命周期内是永久的*。
您正在使用的字符串是来自电子邮件的消息id头的"消息id",它不能用于移动消息(首先,它不一定是唯一的)。如果您有UID,您应该能够使用带有UID修饰符标志的imap_mail_move来移动消息。
(我不熟悉PHP API,但也许您可以将UID修饰符标志传递给message_header以在结果集中也获得UID)
*:只要文件夹的UIDVALIDITY不改变,这在行为良好的服务器上是不应该的,只要文件夹没有被删除并以相同的名称重新创建