Php 未读电子邮件标签

Php 未读电子邮件标签,php,gmail-api,Php,Gmail Api,在PHP中,我使用Gmail api获取客户端的Gmail收件箱 使用 Array ( ['maxResults'] => 50, ['labelIds'] => INBOX, ['q'] => is:unread) 我正在邮箱/gmail中搜索未读电子邮件,但我收到了1封标有的电子邮件 [labelIds] => Array([0] => Label_2 [1] => SENT). gmail如何将这封邮件识别为未读&我可以根据什么突出显示这封未读邮件

在PHP中,我使用Gmail api获取客户端的Gmail收件箱

使用

Array ( ['maxResults'] => 50, ['labelIds'] => INBOX, ['q'] => is:unread)
我正在邮箱/gmail中搜索未读电子邮件,但我收到了1封标有的电子邮件

[labelIds] => Array([0] => Label_2 [1] => SENT). 
gmail如何将这封邮件识别为未读&我可以根据什么突出显示这封未读邮件?我的第二个问题是,这封电子邮件的标签是“已发送”它是如何出现在“收件箱”中的

$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);

有没有人能告诉我这是否是产生的问题()

您只搜索未读的电子邮件。如果您想要未读和收件箱中的标签,请尝试使用

q = label:unread label:inbox 

将来,测试gmail搜索的最简单方法是在gmail web应用程序中,您可以在那里获得您想要的搜索结果,然后将其复制到q中。

您只搜索未读的电子邮件。如果您想要未读和收件箱中的标签,请尝试使用

q = label:unread label:inbox 

将来,测试gmail搜索的最简单方法是在gmail web应用程序中,您可以在那里获得所需的搜索结果,然后将其复制到q中。

您使用“收件箱”标签检索所有线程,然后检索这些线程的所有消息

请注意,线程同时包含传入和传出消息

因此,它将包含标签“收件箱”(用于接收邮件),但

如果列出该线程的所有消息,还将列出已发送的消息。 而不是质疑

$this->gmailApi->get_threads($service,$userId,$param);
你需要使用

$service->users_messages->listUsersMessages($userId, $param);
指定
labelIds[]
作为此方法的可选参数

为什么?
  • 如果使用“is:unread”作为
    q
    参数和
    labelIds
    收件箱查询线程,结果将包含收件箱中至少包含一条未读消息的所有线程
  • 如果在下一步中检索到属于这些线程的所有消息,您将获得属于这些线程的所有消息,其中一些消息可能会被读取和/或不在收件箱中
  • 相反,您只需要使用
    q
    “is:unread”和
    labelid
    “INBOX”直接查询所有这些消息(而不是线程)
基于您的代码的示例代码段:

//以下代码仅在setUseBatch()设置为false时有效
$client->setUseBatch(false);
$messagesResponse=$service->users\u messages->listUsersMessages($userId,$param);
如果($messagesResponse){
$messages=$messagesResponse->getMessages();
foreach($key=>$val的消息){
打印(“\n未读邮件id”。$val->id.“\n”);
}
}

检索标签为“收件箱”的所有线程,然后检索这些线程的所有邮件

请注意,线程同时包含传入和传出消息

因此,它将包含标签“收件箱”(用于接收邮件),但

如果列出该线程的所有消息,还将列出已发送的消息。 而不是质疑

$this->gmailApi->get_threads($service,$userId,$param);
你需要使用

$service->users_messages->listUsersMessages($userId, $param);
指定
labelIds[]
作为此方法的可选参数

为什么?
  • 如果使用“is:unread”作为
    q
    参数和
    labelIds
    收件箱查询线程,结果将包含收件箱中至少包含一条未读消息的所有线程
  • 如果在下一步中检索到属于这些线程的所有消息,您将获得属于这些线程的所有消息,其中一些消息可能会被读取和/或不在收件箱中
  • 相反,您只需要使用
    q
    “is:unread”和
    labelid
    “INBOX”直接查询所有这些消息(而不是线程)
基于您的代码的示例代码段:

//以下代码仅在setUseBatch()设置为false时有效
$client->setUseBatch(false);
$messagesResponse=$service->users\u messages->listUsersMessages($userId,$param);
如果($messagesResponse){
$messages=$messagesResponse->getMessages();
foreach($key=>$val的消息){
打印(“\n未读邮件id”。$val->id.“\n”);
}
}


您是否有可能在将来发布PHP代码以帮助他人?使用“尝试此API”进行测试总是很有用的,以了解问题是源于请求本身还是源于其在PHP中的实现:@ziganotschka我如何使用
尝试此API
我没有登录名details@softech您可以使用相同的密码登录您用来访问您的邮箱的Google或Gmail帐户Inbox@ziganotschka这个问题存在于一个客户的gmail帐户中&我无法将其复制到我的gmail中&如果我使用相同的Google或gmail帐户登录我的收件箱,这将给我的Inbox提供任何机会,你可以在将来发布你的PHP代码来帮助其他人吗?这对我来说总是很有用的使用Try this API进行测试,以了解问题源于请求本身或其在PHP中的实现:@ziganotschka我如何使用
Try this API
我没有登录details@softech您可以使用与访问您的邮箱相同的Google或Gmail帐户登录Inbox@ziganotschka这是一个客户的问题gmail帐户&我不能将它复制到我的gmail中&如果我使用相同的Google或gmail帐户登录我的收件箱,它将给出我的收件箱相同的结果,仍然得到相同的结果,仍然得到相同的结果,仍然收到电子邮件不,我只列出了使用您提到的相同方法的收件箱标签ID如果我没有弄错的话,您正在获取所列线程的所有消息,而不是列出带有指定标签的所有消息我正在
收件箱中搜索
未读的
电子邮件,在这个问题上,我已经提到了我正在传递的参数列表。但作为回应,我收到了一两封既没有收件箱标签也没有未读的电子邮件label@softech:我更新了我的答案,希望现在更清楚了。@ziganotchka我知道我的代码结果将包含收件箱中至少包含一条未读邮件的所有线程,但当我打开该线程时,只有一条邮件&也是我的第二条消息