PowerShell
PowerShell
BatchModify - Add a Label to each Message in Search Results
See more GMail REST API Examples
Searchs GMail for messages meeting a criteria and adds a label to each message found.Chilkat PowerShell Downloads
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"
$success = $false
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$http = New-Object Chilkat.Http
$http.AuthToken = "GMAIL-ACCESS-TOKEN"
$userId = "me"
$http.SetUrlVar("userId",$userId)
$query = "subject:questions"
$http.SetUrlVar("query",$query)
$url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages?q={$query}"
$sb = New-Object Chilkat.StringBuilder
$success = $http.QuickGetSb($url,$sb)
if ($success -eq $false) {
$($http.LastErrorText)
exit
}
$json = New-Object Chilkat.JsonObject
$json.LoadSb($sb)
$json.EmitCompact = $false
$($json.Emit())
if ($http.LastStatus -ne 200) {
$("Failed.")
exit
}
# If successful, the received JSON looks like this:
# {
# "messages": [
# {
# "id": "166f583051d36144",
# "threadId": "166f583051d36144"
# },
# {
# "id": "166f5815e1f36144",
# "threadId": "166f5815e1f36144"
# },
# ...
# {
# "id": "166f580639e36144",
# "threadId": "166f580639e36144"
# },
# {
# "id": "15dbc2e28ec789c6",
# "threadId": "15dbc2e28ec789c6"
# }
# ],
# "nextPageToken": "13434766102274844688",
# "resultSizeEstimate": 103
# }
#
# Next, we'll be sending an HTTP POST to add the label "questions" to each message in the
# search results. The JSON to be sent for the batchModify is this:
# {
# "ids": [
# string
# ],
# "addLabelIds": [
# string
# ],
# "removeLabelIds": [
# string
# ]
# }
# We'll omit "removeLabelIds" because we're not removing any labels.
# We are parsing the JSON search results, and at the same time building the batchModify JSON.
$json2 = New-Object Chilkat.JsonObject
$i = 0
$numMessages = $json.SizeOfArray("messages")
while (($i -lt $numMessages)) {
$json.I = $i
$id = $json.StringOf("messages[i].id")
$json2.I = $i
$json2.UpdateString("ids[i]",$id)
$i = $i + 1
}
# We need the id of the label (not the name).
# I know the name of the label is "questions", but I need to know the id.
# See this example: Get Label Id by Name
# The id of my label named "questions" is "Label_43"
$labelId = "Label_43"
$json2.UpdateString("addLabelIds[0]",$labelId)
$json2.UpdateNewArray("removeLabelIds")
$json2.EmitCompact = $false
$($json2.Emit())
# Send the batchModify
$url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages/batchModify"
$resp = New-Object Chilkat.HttpResponse
$success = $http.HttpJson("POST",$url,$json2,"application/json",$resp)
if ($success -eq $false) {
$($http.LastErrorText)
exit
}
$("status = " + $resp.StatusCode)
# A 204 response status indicate success.
if ($resp.StatusCode -ne 204) {
$($resp.BodyStr)
$("Failed.")
exit
}
# The 204 response has an empty response body..
$("BatchModify success!")