IMAP 函数
在线手册:中文  英文

imap_uid

(PHP 4, PHP 5)

imap_uidThis function returns the UID for the given message sequence number

说明

int imap_uid ( resource $imap_stream , int $msg_number )

This function returns the UID for the given message sequence number. An UID is a unique identifier that will not change over time while a message sequence number may change whenever the content of the mailbox changes.

This function is the inverse of imap_msgno().

参数

imap_stream

imap_open() 返回的 IMAP 流。

msg_number

The message number.

返回值

The UID of the given message.

注释

Note:

This function is not supported by POP3 mailboxes.

参见


IMAP 函数
在线手册:中文  英文

用户评论:

Maikel (2010-07-14 17:27:20)

Be aware that the uid is unique in a single mailbox. That means a message can have as much uids as mailboxes

anon et mouse (2009-01-28 11:57:52)

clarification for Andreas' note about imap_expunge()...
imap_expunge() does indeed change the UID, but only *after* the IMAP stream has closed and then reconnects.
You can use imap_expunge() as many times as you want within one IMAP stream (no reconnects) and the UID stays the same while the Msgno will change with imap_delete() followed by imap_expunge().

Andreas Seeger (2008-07-24 10:26:23)

The uid will change in case of unsing imap_expunge. Be shure that
all work ist done before using imap_expunge.

roger at sdr dot com dot au (2008-05-01 19:34:27)

A little quirk of UIDs in a PUBLIC folder in MDaemon (and perhaps other servers?). The UIDs may be unsynchronised between users if the server's option to store flags on a per-user basis is turned on. That is, a message may have a UID of 5 for one user (meaning it was the 5th message to enter the box) but 3 for another user (who perhaps subscribed to the box later). If this is a problem, turn off the per-user option for the mailbox.

steve_foley at excite dot com (2002-09-04 22:27:02)

Please note that message_id in the header is NOT the UID - and its dangerous to use as many mail progs don't put a message id in

robert dot blanch at hsc dot utah dot edu (2002-07-16 19:25:29)

Another way to get the UID without using imap_uid that works with pop3:
$header = imap_headerinfo( $mbox, $msgno );
$UID = $header->message_id;

(2002-06-20 13:53:18)

For those using a POP3 mailbox, this function, as noted, does not work.
One way around this is to use direct FTP communication with the mail server. For example, the following function takes a mailbox/password and message sequence number, and from this returns the message UID.
function fetch_UID($account, $password, $message_number)
{
$retval = 0;
$fp = fsockopen($POPMAILSERVER, 110);
if ($fp > 0)
{
$buf = fgets($fp, 1024);
fputs($fp, "USER $account\r\n");
$buf = fgets($fp, 1024);
fputs($fp, "PASS $password\r\n");
$buf = fgets($fp, 1024);
fputs($fp, "UIDL $message_number\r\n");
$retval=fgets($fp, 1024);
fputs($fp, "QUIT\r\n");
$buf = fgets($fp,1024);
fclose($fp);
}
return substr($retval,6,30);
}
Note: 110 is the TCP port commonly associated with a POP3 mailbox. Also the substr() function is used to trim the +OK and the message number from the beginning of the server's response.
I'm sure there are other (better) ways to do this. But after a fruitless search of the internet, this is what I came up with, and it seems to work for me.

易百教程