Вызов GmailApp.createLabel()
с именем метки, которое уже существует, вернет уже существующую метку. Он не внесет никаких изменений в ваш существующий ярлык.
Согласно документации, единственный способ создать или получить метку - через имя метки. Важно отметить, что единственным идентифицирующим свойством, перечисленным в классе GmailLabel , является имя . Таким образом, я предполагаю, что Apps Script обеспечивает уникальность имен и предотвращает перезапись существующих меток.
Мы можем попробовать простой тест. Если защита от перезаписи не существует, то создание новой метки, вероятно, удалит связь между меткой и электронной почтой. Итак, давайте посмотрим, какие электронные письма появляются под определенным ярлыком, создадим новый ярлык с тем же именем и посмотрим, совпадает ли список писем.
function test() {
var label1 = GmailApp.getUserLabelByName("test_label"); // Get existing label
var threads = label1.getThreads();
var label1_messages = [];
for (var i in threads) {
var messages = threads[i].getMessages();
for (var j in messages) {
label1_messages.push(messages[j].getId()); // Store the message IDs in label1_messages
}
}
var label2 = GmailApp.createLabel("test_label"); // Create a new label with the same name
var threads = label2.getThreads();
var label2_messages = [];
for (var i in threads) {
var messages = threads[i].getMessages();
for (var j in messages) {
label2_messages.push(messages[j].getId()); // Store the message IDs in label2_messages
}
}
Logger.log(JSON.stringify(label1_messages) == JSON.stringify(label2_messages)); // Quick, non-robust check of the arrays results in TRUE
}
В результате они совпадают, что подтверждает предположение, что createLabel()
достаточно умен, чтобы избежать перезаписи существующих меток.
Хотя мы можем пойти дальше. Gmail API четко указывает на то, что метки имеют идентификатор. Здесь снова, я не вижу никаких требований, чтобы имена меток были уникальными (хотя мы можем предположить, что это, учитывая, что конечные пользователи могут взаимодействовать только с именами меток - это будет ужасный UX, если существует несколько с одним и тем же именем).
Если вы включите Gmail API в Расширенные службы Google , мы сможем протестировать требования API. Попробуйте создать новый ярлык с тем же именем, которое, как мы уже знаем, существует.
function createLabel() {
Gmail.Users.Labels.create({name: "test_label"}, "me");
}
Это приводит к ошибке ниже, которая затем подтверждает, что имена меток должны быть уникальными.
API-вызов gmail.users.labels.create завершился ошибкой: имя метки
существует или конфликтует
Давайте сделаем еще один шаг. Сначала я предполагал, что Apps Script защищает от перезаписи существующих меток. Итак, давайте проверим идентификатор существующей метки, затем вызовем GmailApp.createLabel()
с тем же именем метки и посмотрим, была ли создана новая метка / изменился идентификатор метки.
function finalTest() {
var response = Gmail.Users.Labels.list("me"); // Get labels
for (var i in response.labels) {
var label = response.labels[i];
if (label.name == "test_label")
Logger.log(label.id); // ID: Label_48
}
var newLabel = GmailApp.createLabel("test_label"); // Create a new label with the same name
var response = Gmail.Users.Labels.list("me"); // Get labels again to see if any difference
for (var i in response.labels) {
var label = response.labels[i];
if (label.name == "test_label")
Logger.log(label.id); // ID: Label_48
}
}
Как видите, идентификатор метки остается прежним, что означает, что GmailApp.createLabel()
действительно защищает от перезаписи существующих меток.