ezcMailImapTransport::fetchFlags PHP Method

fetchFlags() public method

This method supports unique IDs instead of message numbers. See {@link ezcMailImapTransportOptions} for how to enable unique IDs referencing. $messages is an array of message numbers, for example: array( 1, 2, 4 ); The format of the returned array is: array( message_number => array( flags ) ) Before calling this method, a connection to the IMAP server must be established and a user must be authenticated successfully, and a mailbox must be selected. Example: $imap = new ezcMailImapTransport( 'imap.example.com' ); $imap->authenticate( 'username', 'password' ); $imap->selectMailbox( 'mailbox' ); // Inbox or another mailbox $flags = $imap->fetchFlags( array( 1, 2, 4 ) ); The returned array $flags will be something like: array( 1 => array( '\Seen' ), 2 => array( '\Seen' ), 4 => array( '\Seen', 'NonJunk' ) );
public fetchFlags ( array $messages ) : array(mixed)
$messages array
return array(mixed)
    public function fetchFlags($messages)
    {
        $uid = $this->options->uidReferencing ? self::UID : self::NO_UID;
        if ($this->state != self::STATE_SELECTED && $this->state != self::STATE_SELECTED_READONLY) {
            throw new ezcMailTransportException("Can't call fetchFlags() on the IMAP transport when a mailbox is not selected.");
        }
        $flags = array();
        $ids = implode($messages, ',');
        $tag = $this->getNextTag();
        $this->connection->sendData("{$tag} {$uid}FETCH {$ids} (FLAGS)");
        $response = trim($this->connection->getLine());
        while (strpos($response, $tag) === false) {
            if (strpos($response, ' FETCH (') !== false) {
                if ($this->options->uidReferencing) {
                    if (preg_match('/\\*\\s.*\\sFETCH\\s\\(FLAGS \\((.*)\\)\\sUID\\s(.*)\\)/U', $response, $matches)) {
                        $parts = explode(' ', $matches[1]);
                        $flags[intval($matches[2])] = $parts;
                    } else {
                        preg_match('/\\*\\s.*\\sFETCH\\s\\(UID\\s(.*)\\sFLAGS \\((.*)\\)\\)/U', $response, $matches);
                        $parts = explode(' ', $matches[2]);
                        $flags[intval($matches[1])] = $parts;
                    }
                } else {
                    preg_match('/\\*\\s(.*)\\sFETCH\\s\\(FLAGS \\((.*)\\)/U', $response, $matches);
                    $parts = explode(' ', $matches[2]);
                    $flags[intval($matches[1])] = $parts;
                }
            }
            $response = trim($this->connection->getLine());
        }
        if ($this->responseType($response) != self::RESPONSE_OK) {
            throw new ezcMailTransportException("The IMAP server could not fetch flags for the messages '{$messages}': {$response}.");
        }
        return $flags;
    }

Usage Example

コード例 #1
0
 public function testUidFetchFlagsNotSelected()
 {
     $imap = new ezcMailImapTransport(self::$server, self::$port, array('uidReferencing' => true));
     $imap->authenticate(self::$user, self::$password);
     try {
         $imap->fetchFlags(self::$ids);
         $this->fail("Expected exception was not thrown.");
     } catch (ezcMailTransportException $e) {
     }
 }
All Usage Examples Of ezcMailImapTransport::fetchFlags