Dovecot Sieve 和 :output 变量用于执行添加无效字符

Dovecot Sieve 和 :output 变量用于执行添加无效字符

我正在尝试让吹筛过滤器工作

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是一个调用 API 并根据电子邮件地址验证用户然后返回布尔值(作为控制台的输出)的扩展程序。

当我以其他方式删除语句时,一切都正常,if string :matches "${valid_user}" "True"看起来好像无法识别valid_user变量。

当我通过管道传输valid_user某个脚本只是为了捕获该变量的值时,它会引发一个错误:

错误:指定的:args 项“True?”无效。

为什么在这种情况下在变量中添加问号?

有什么想法吗?

答案1

在这种情况下,“True”后面跟着一个换行符,Sieve 会很乐意读取它并将其包含在变量值中。

为了修复它,user-verification脚本必须在没有新行的情况下输出它。

相关内容