Manage threads

This document explains how to retrieve thread messages and add messages to threads using the Gmail API.

The Gmail API uses the threads resource to group email replies with their original message into a single conversation or thread. This lets you retrieve all messages in a conversation, in order, which makes it easier to have context for a message or to refine search results.

Like the messages resource, threads can also have labels applied to them. However, unlike messages, threads cannot be created, only deleted. Messages can, however, be inserted into a thread.

Retrieve threads

Threads provide a way of retrieving messages in a conversation, in order. By listing a set of threads you can choose to group messages by conversation and provide additional context. You can retrieve a list of threads using the threads.list method, or retrieve a specific thread with the threads.get method.

The following code sample shows how to use the threads.get and threads.list methods in a sample that retrieves the most chatty threads in your inbox. The threads.list method fetches all thread IDs, then threads.get grabs all messages in each thread. For messages with three or more replies, we extract the Subject line and display the non-empty ones plus the number of messages in the thread.

Python

gmail/snippet/thread/threads.py
 import 
  
 google.auth 
 from 
  
 googleapiclient.discovery 
  
 import 
 build 
 from 
  
 googleapiclient.errors 
  
 import 
 HttpError 
 def 
  
 show_chatty_threads 
 (): 
  
 """Display threads with long conversations(>= 3 messages) 
 Return: None 
 Load pre-authorized user credentials from the environment. 
 TODO(developer) - See https://developers.google.com/identity 
 for guides on implementing OAuth2 for the application. 
 """ 
 creds 
 , 
 _ 
 = 
 google 
 . 
 auth 
 . 
 default 
 () 
 try 
 : 
 # create gmail api client 
 service 
 = 
 build 
 ( 
 "gmail" 
 , 
 "v1" 
 , 
 credentials 
 = 
 creds 
 ) 
 # pylint: disable=maybe-no-member 
 # pylint: disable:R1710 
 threads 
 = 
 ( 
 service 
 . 
 users 
 () 
 . 
 threads 
 () 
 . 
 list 
 ( 
 userId 
 = 
 "me" 
 ) 
 . 
 execute 
 () 
 . 
 get 
 ( 
 "threads" 
 , 
 []) 
 ) 
 for 
 thread 
 in 
 threads 
 : 
 tdata 
 = 
 ( 
 service 
 . 
 users 
 () 
 . 
 threads 
 () 
 . 
 get 
 ( 
 userId 
 = 
 "me" 
 , 
 id 
 = 
 thread 
 [ 
 "id" 
 ]) 
 . 
 execute 
 () 
 ) 
 nmsgs 
 = 
 len 
 ( 
 tdata 
 [ 
 "messages" 
 ]) 
 # skip if <3 msgs in thread 
 if 
 nmsgs 
> 2 
 : 
 msg 
 = 
 tdata 
 [ 
 "messages" 
 ][ 
 0 
 ][ 
 "payload" 
 ] 
 subject 
 = 
 "" 
 for 
 header 
 in 
 msg 
 [ 
 "headers" 
 ]: 
 if 
 header 
 [ 
 "name" 
 ] 
 == 
 "Subject" 
 : 
 subject 
 = 
 header 
 [ 
 "value" 
 ] 
 break 
 if 
 subject 
 : 
 # skip if no Subject line 
 print 
 ( 
 f 
 "- 
 { 
 subject 
 } 
 , 
 { 
 nmsgs 
 } 
 " 
 ) 
 return 
 threads 
 except 
 HttpError 
 as 
 error 
 : 
 print 
 ( 
 f 
 "An error occurred: 
 { 
 error 
 } 
 " 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 show_chatty_threads 
 () 

You can also filter threads using the same query parameters as those used for the messages resource. If any message in a thread matches the query, the thread is returned in the result.

Add drafts and messages to threads

If you're sending or migrating messages that are a response to another email or part of a conversation, your application should add that message to the related thread. This makes it easier for Gmail users who are participating in the conversation to keep the message in context.

A draft can be added to a thread as part of creating , updating , or sending a message using the drafts resource.

You can also add a message to a thread as part of inserting or sending a message using the messages resource.

To be part of a thread, a draft or message must meet the following criteria:

  1. The requested threadId must be specified as part of the drafts.message or messages resource you supply with your request.

  2. The References and In-Reply-To headers must be set in compliance with the RFC 2822 standard.

  3. The Subject headers must match.

For code samples of how to use the threadId , see Create drafts or Send messages . In both cases, you need to include the target threadId within the messages resource of your request.

Create a Mobile Website
View Site in Mobile | Classic
Share by: