Sample code for 30+ languages & platforms
Java

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 Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.HttpResponse;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        Http http = new Http();
        http.setAuthToken("GMAIL-ACCESS-TOKEN");

        String userId = "me";
        http.setUrlVar("userId", userId);

        String query = "subject:questions";
        http.setUrlVar("query", query);

        String url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages?q={$query}";

        StringBuilder sb = new StringBuilder();
        try {
            http.quickGetSb(url, sb);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        JsonObject json = new JsonObject();
        json.loadSb(sb);
        json.setEmitCompact(false);
        System.out.println(json.emit());

        if (http.getLastStatus() != 200) {
            System.out.println("Failed.");
            return;
        }

        // 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.

        JsonObject json2 = new JsonObject();

        int i = 0;
        int numMessages = json.sizeOfArray("messages");
        while (i < numMessages) {
            json.setI(i);
            String id = json.stringOf("messages[i].id");
            json2.setI(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"
        String labelId = "Label_43";
        json2.updateString("addLabelIds[0]", labelId);
        json2.updateNewArray("removeLabelIds");

        json2.setEmitCompact(false);
        System.out.println(json2.emit());

        // Send the batchModify
        url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages/batchModify";
        HttpResponse resp = new HttpResponse();
        try {
            http.httpJson("POST", url, json2, "application/json", resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("status = " + resp.getStatusCode());

        // A 204 response status indicate success.
        if (resp.getStatusCode() != 204) {
            System.out.println(resp.getBodyStr());
            System.out.println("Failed.");
            return;
        }

        // The 204 response has an empty response body..

        System.out.println("BatchModify success!");
    }
}