Sieve Vacation Extension:保存外出回复

Sieve Vacation Extension:保存外出回复

我在 Linux 上有一个 SMTP + IMAP 服务器,并使用筛选过滤来提供一些有用的功能。

其中一个功能是外出回复,由以下脚本提供:

require ["fileinto", "vacation", "variables"];

# ignore spam
if header :contains "X-Spam-Flag" "YES" {
  fileinto "Junk E-mail";
  stop;
}

vacation
  :days 1
  :subject "Out of office"
  :addresses ["..."]
"contact x, y, or z instead.";

但是,我不喜欢自动回复对用户透明这一事实;用户无法明确回答“X 是否收到回复?”这个问题。原则上,我也希望用户能够看到从他们的地址发送的每封电子邮件。

因此,我希望将所有外出回复存储在用户sent文件夹中。这样,用户就可以轻松查看已发送的自动回复。

有谁知道如何实现这一点?

答案1

没有直接的方法来实现您的目标,因为 Sieve 脚本仅在传入邮件上运行。传出邮件由 Postfix/Exim/Sendmail 或您正在使用的任何邮件传输代理处理,因此 Sieve 不会参与其中。对于传入邮件,RFC 5230 明确禁止将 vacation 与 Sieve 的“fileinto”操作一起使用:请参阅RFC 5230 第 4.7 节

因此,为了让 Sieve 参与进来 (1) 您必须将发出的休假消息的副本发送给自己,并且 (2) 您必须为 Sieve 提供一种方法来识别您的休假自动回复,以便它可以将传入的自动回复消息移动到您的Sent文件夹中。

实现此目的的一种可能方法是使用 Postfix 中的“加号别名”机制。这样,您可以从“加号别名”地址发送休假自动回复,从而让 Postfix 和 Dovecot/Sieve 都能识别它们。

在您的 Sieve 脚本中,确保休假自动回复是从您的“加号别名”地址发送的:

vacation
  :from "Your Name <[email protected]>"

添加以下内容/etc/postfix/main.cf

recipient_delimiter = +
header_checks = pcre:/etc/postfix/header_checks.pcre

在 中/etc/postfix/header_checks.pcre,识别您发出的休假消息并添加规则以将此类消息复制给您自己:

/^From: [^<]*<your.name\[email protected]>/  BCC [email protected]

也许可以使用反向引用来编写类似的一般规则,但我还没有尝试过,也不能说这是否有效。From: [^<]*<([^\+]+)\[email protected]>/ BCC [email protected]

确保您已recipient_delimiter = +位于 /etc/dovecot/conf.d/90-sieve.conf(或您用于配置 Sieve 的任何其他文件)。

最后,将以下规则添加到 Sieve 休假脚本的顶部:

require ["vacation", "variables", "date", "relational", "fileinto", "envelope"];
if allof ( address :is :all "from" "[email protected]",
           envelope :is :all "to" "[email protected]" ) {
  fileinto "Sent";
}

此 Sieve 规则将移动发给您的邮件以及来自[电子邮件保护]到您的Sent文件夹。

相关内容