Gmail API - ListUsersLabels - 没有邮件总数

Posted

技术标签:

【中文标题】Gmail API - ListUsersLabels - 没有邮件总数【英文标题】:Gmail API - ListUsersLabels - No messagesTotal 【发布时间】:2019-12-04 15:32:56 【问题描述】:

我正在使用 GMail API 来检索我的标签: https://developers.google.com/gmail/api/v1/reference/users/labels/list

我的代码如下:

$userId = 'me';

$labels = array();

try 
    $labelsResponse = $service->users_labels->listUsersLabels($userId);

    if ($labelsResponse->getLabels()) 
        $labels = array_merge($labels, $labelsResponse->getLabels());
    

    foreach ($labels as $label) 
        echo "<pre>";
        print_r($label);
        echo "</pre>";
    
 catch (Excetion $e) 
    print 'An error occurred: ' . $e->getMessage();

这一切似乎都可以正常工作,但它永远不会返回标签内的消息总数:

Google_Service_Gmail_Label Object
(
    [colorType:protected] => Google_Service_Gmail_LabelColor
    [colorDataType:protected] => 
    [id] => INBOX
    [labelListVisibility] => labelShow
    [messageListVisibility] => hide
    [messagesTotal] => 
    [messagesUnread] => 
    [name] => INBOX
    [threadsTotal] => 
    [threadsUnread] => 
    [type] => system
    [internal_gapi_mappings:protected] => Array
        (
        )

    [modelData:protected] => Array
        (
        )

    [processed:protected] => Array
        (
        )

)

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

您需要标签 ID 来获取附加到它的消息数量。首先执行List函数获取所有标签,然后取你需要的标签的Id,在Get函数中使用。

在我的情况下,这会返回:


 "id": "Label_ID",
 "name": "labelName",
 "type": "user",
 "messagesTotal": 11,
 "messagesUnread": 0,
 "threadsTotal": 11,
 "threadsUnread": 0

另一种方法是进行搜索查询,将消息 ID 存储在数组中,并获取长度:

def get_emails():
        user_id = 'me' #Your email
        mail_ids = []
        query = 'label:your_label' 
        response = mail_service.users().messages().list(userId=user_id, q=query).execute()
        items = response.get('messages', [])
        if not items:
                print('No mails found')
                sys.exit()
        else:
                for items in items:
                        mail_ids.append(items['id'])
        print(len(mail_ids))

【讨论】:

以上是关于Gmail API - ListUsersLabels - 没有邮件总数的主要内容,如果未能解决你的问题,请参考以下文章

Gmail现在支持安排电子邮件,如何使用gmail rest api工作,还是api支持此功能?

尝试通过 API 删除 gmail 邮件时出现 401 错误

使用相同控制台应用程序的 Gmail REST API 和 Gmail IMAP 的 API 配额

Gmail 收件箱 API

Google 工作区:通过 API 激活 gmail

请求 gmail-api 时出现 HttpError 429:超出用户速率限制