Сито Dovecot и: выходная переменная для выполнения

Я пытаюсь заставить сито работать

require ["fileinto", "imap4flags", "mailbox", "body", "envelope", "vnd.dovecot.pipe", "variables", "vnd.dovecot.execute"];

if envelope :matches "To" "*@*" {
  set "recipient" "${0}";
  set "user" "${1}";
  set "recip_domain" "${2}";
}

if envelope :matches "From" "*" {
  set "sender" "${0}";
}

#Check if recipient is valid user
if execute :output "valid_user" "user-verification" "${recipient}" {
    if string :matches "${valid_user}" "True" {
      if body :raw :contains ["message/notification"] {
        setflag "\\Seen";
        fileinto :create "Notifications";
        stop;
      }
    }
}

куда user-verification это extprogram, который вызывает API и проверяет пользователя на основе адреса электронной почты, а затем возвращает логическое значение (как вывод на консоль).

Все отлично работает когда уберу if string :matches "${valid_user}" "True" Заявление иначе, как это выглядит, не признает valid_userпеременная.

Когда я труба valid_user в некоторый скрипт просто для захвата значения этой переменной он выдает ошибку:

ошибка: указано:args item `True?' является недействительным.

Почему вопросительный знак был добавлен к переменной в этом случае?

Мысли?

1 ответ

Решение

В этом случае за "True" следует новая строка, которую Sieve с радостью читает и включает в значение переменной.

Чтобы это исправить user-verification скрипт должен выводить его без новой строки.

Другие вопросы по тегам