public String setMessageLabel(String messageId, String labelName) { try { Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName("Gmail Quickstart") .build(); // For now assuming that when a label is set, we make it read also. List<String> labelsToRemove = new ArrayList(); labelsToRemove.add("UNREAD"); List<String> labelsToAdd = new ArrayList(); if (labelName != null) { // this can be optimized by get all label names once they login ListLabelsResponse response = service.users().labels().list("me").execute(); List<Label> labels = response.getLabels(); boolean labelExists = false; for (Label label : labels) { // System.out.println(label.toPrettyString()); if (label.getName().equalsIgnoreCase(labelName)) { labelsToAdd.add(label.getId()); System.out.println("Adding label:" + labelName); labelExists = true; break; } } if (!labelExists) { Label label = new Label() .setName(labelName) .setLabelListVisibility("labelShow") .setMessageListVisibility("show"); label = service.users().labels().create("me", label).execute(); labelsToAdd.add(label.getId()); } } ModifyMessageRequest mods; mods = new ModifyMessageRequest().setRemoveLabelIds(labelsToRemove).setAddLabelIds(labelsToAdd); Message message = service.users().messages().modify("me", messageId, mods).execute(); return "success"; } catch (IOException ioe) { System.out.println("ioerror"); // ioe.printStackTrace(); return "error"; } }