• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • imap_status()

    (PHP 4, PHP 5, PHP 7)

    Returns status information on a mailbox

    说明

    imap_status(resource $imap_stream,string $mailbox,int $options): object

    Gets status information about the given$mailbox.

    参数

    $imap_stream

    由imap_open()返回的 IMAP 流。

    $mailbox

    The mailbox name, see imap_open() for more information

    Warning

    Passing untrusted data to this parameter isinsecure, unlessimap.enable_insecure_rsh is disabled.

    $options

    Valid flags are:

    • SA_MESSAGES- set$status->messagesto the number of messages in the mailbox
    • SA_RECENT- set$status->recentto the number of recent messages in the mailbox
    • SA_UNSEEN- set$status->unseento the number of unseen(new)messages in the mailbox
    • SA_UIDNEXT- set$status->uidnextto the next uid to be used in the mailbox
    • SA_UIDVALIDITY- set$status->uidvalidityto a constant that changes when uids for the mailbox may no longer be valid
    • SA_ALL- set all of the above

    返回值

    This function returns an object containing status information. The object has the following properties:messages,recent,unseen,uidnext, anduidvalidity.

    flagsis also set, which contains a bitmask which can be checked against any of the above constants.

    范例

    Example #1 imap_status() example

    <?php
    $mbox = imap_open("{imap.example.com}", "username", "password", OP_HALFOPEN)
          or die("can't connect: " . imap_last_error());
    $status = imap_status($mbox, "{imap.example.org}INBOX", SA_ALL);
    if ($status) {
      echo "Messages:   " . $status->messages    . "<br />\n";
      echo "Recent:     " . $status->recent      . "<br />\n";
      echo "Unseen:     " . $status->unseen      . "<br />\n";
      echo "UIDnext:    " . $status->uidnext     . "<br />\n";
      echo "UIDvalidity:" . $status->uidvalidity . "<br />\n";
    } else {
      echo "imap_status failed: " . imap_last_error() . "\n";
    }
    imap_close($mbox);
    ?>
    
    In 'reply' to my previous post;
    I`m not sure of that anymore
    I think this trick works,
    but the rest of my script just sucks..
    Conclusion:
    You can get the last UID by using status->uidnext-1
    BUT: This is not a good way, if another message is added after your append and before your status; you are screwed
    I had issues with imap_status not working correctly, while other imap functions seemed okay. I always got the ['flags']=0 response. No notes here and Google searching suggests it doesn't working properly with Exchange, so I wrote a little workaround, to at least get some information.
    <?php
      function my_imap_status($stream, $mailbox='', $info=SA_ALL)
      {
        // get current mailbox name (and info)
        $curr_obj=imap_check($stream);
        if(!$curr_obj) return false;
        
        // if request if for current mailbox then just return it
        if( (empty($mailbox)) || ($mailbox==$curr_obj->Mailbox) ) return $curr_obj;
        
        // get current mailbox
        $current_mailbox=$curr_obj->Mailbox;
        
        //switch to new mailbox
        if(!imap_reopen($stream, $mailbox)) return false;
        
        // get info
        $obj=imap_check($stream);
        
        // switch back to original mailbox
        imap_reopen($stream, $current_mailbox);
        
        //return info
        return $obj;
      }
    ?>
    
    another tips is to get only total number of message and recent message
    $imap_obj = imap_status($mbox, '{mail.mysrv.com:143/imap}INBOX', SA_MESSAGES+SA_RECENT);
    echo('<pre>'); var_dump($imap_obj); echo('</pre>');

    上篇:imap_sort()

    下篇:imap_subscribe()