UNREAD почтовые ярлыки - PullRequest
       13

UNREAD почтовые ярлыки

1 голос
/ 20 сентября 2019

В PHP, используя Gmail API, я получаю входящие Gmail клиента.

Используя

Array ( ['maxResults'] => 50, ['labelIds'] => INBOX, ['q'] => is:unread)

Я ищу непрочитанные электронные письма в почтовом ящике / Gmail, но я получил 1 электронное письмо с надписьюс

[labelIds] => Array([0] => Label_2 [1] => SENT). 

Как gmail идентифицирует это письмо как unread и на каких основах я могу выделить это unread письмо?Мой второй вопрос: письмо помечено SENT как оно появилось в INBOX?

$service = new Google_Service_Gmail($client);
        $batch = new Google_Http_Batch($client);
        $userId='me';
        $threads = array();
        $pageToken = NULL;
        $param = array();
        $getPageToken = $getParam('pageToken');
        if ($getPageToken && $getPageToken!='') {
            $param['pageToken'] = $getPageToken;
            $pageToken = $getPageToken;
        }
        if($getParam('limit'))
            $param['maxResults']=$getParam('limit');
        else
            $param['maxResults'] = 50;
        if($getParam('in')) {
            $this->view->in=$getParam('in');
            $param['labelIds'] = strtoupper($this->view->in);
        }
        else
            $param['labelIds'] = 'INBOX';
        $search = "";
        $read = $getParam('read_status');
        if($read && (@$read=='read'||$read=='unread'))
            $search = 'is:'.$read;

        if($getParam('search')) {
            $this->view->search = $getParam('search');
            $search .= " ".$this->view->search;
        }
        if($search)
            $param['q'] = $search;
            $threadsResponse=$this->gmailApi->get_threads($service,$userId,$param);
        if($threadsResponse) {
                $threads=$threadsResponse->getThreads();
            $this->view->next_page=$threadsResponse->getNextPageToken();
            $client->setUseBatch(true);
            foreach ($threads as $key => $val) {
                    $thread = $service->users_threads->get($userId, $val->id,['format' => 'full', 'metadataHeaders' => ['From','Date','Subject']]);      
                $batch->add($thread, "mail-".$val->id);
            }
            $results = $batch->execute();
                $threads=$this->gmailApi->get_batch_messages($service,$userId,$results);

Может кто-нибудь сказать мне, возникла ли эта проблема здесь (https://issuetracker.google.com/issues/135166258)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Вы извлекаете все темы с меткой «Входящие», а затем извлекаете все сообщения для этих тем.

Помните, что поток содержит как входящие, так и исходящие сообщения.

Таким образом, он будет содержать метку «Входящие» (для входящих сообщений), но

, если вы перечисляете все сообщения в цепочке, вы также перечислите отправленные сообщения.

Вместо запроса

$this->gmailApi->get_threads($service,$userId,$param);

Я рекомендую вам использовать

$service->users_messages->listUsersMessages($userId, $param);

, указав labelIds[] в качестве необязательного параметра для этого метода.

См. Для получения дополнительной информации ипример кода здесь

0 голосов
/ 20 сентября 2019

Вы ищете только письма, которые не прочитаны.Если вы хотите, чтобы они были непрочитанными и находились в ярлыке папки «Входящие», попробуйте использовать

q = label:unread label:inbox 

. В будущем самый простой способ проверить поиск в Gmail - это веб-приложение Gmail, в котором вы можете получить нужные результаты поиска и просто скопировать их вд.

...