使用 Sieve 将消息分发给多个收件人(防止重复邮寄)

问题描述 投票:0回答:1

对于你们中的一些人来说,这可能是一个简单的问题,但我正在努力使用 Sieve 和一个包罗万象的地址来实现一些电子邮件分发。 我想要的是以下内容:

  1. 发送至 [电子邮件受保护] 的所有电子邮件均应重定向至 [电子邮件受保护],其中 XXX 可以是任何(符合电子邮件标准的)字符串。
  2. 所有发送至 [电子邮件受保护] 的电子邮件均应重定向至 [电子邮件受保护]
  3. 所有未按先前规则重定向的电子邮件都会进入默认的综合邮箱。

到目前为止我尝试过的脚本在大多数情况下都运行良好。但是,如果同时发送电子邮件至 [email protected][email protected],则分发将不再正常工作。这是我尝试过的:

if address :localpart :matches ["To", "Cc"] "shop-*" {
  redirect "[email protected]";
} elsif address :localpart :is ["To", "Cc"] "alias47" {
  redirect "[email protected]";
} else {
  keep;
}

问题是,如果发送电子邮件

To: [email protected]
Cc: [email protected]
,那么电子邮件会以 [电子邮件受保护]结束两次。

如果我将脚本更改为

if address :localpart :matches ["To", "Cc"] "shop-*" {
  redirect "[email protected]";
}
if address :localpart :is ["To", "Cc"] "alias47" {
  redirect "[email protected]";
}
keep;

并且电子邮件已发送

To: [email protected]
Cc: [email protected]
,然后电子邮件以 [电子邮件受保护] 结束两次,两次为 [电子邮件受保护],还两次为默认的综合邮箱。

从逻辑的角度来看,我完全理解为什么电子邮件会这样分发。现在的问题是,有没有一种方法可以按照我想要的方式分发电子邮件,或者只能通过单独的邮箱来实现?是否可以引入变量来检查之前是否已将同一封电子邮件发送到某个邮件地址?

感谢您的想法。

email sieve-algorithm
1个回答
0
投票

redirect
会改变隐式的keep,你需要使用
copy
扩展,这样你的脚本才能继续运行。

require "copy";
require "variables";

set "sent" "false";

if address :localpart :matches ["To", "Cc"] "shop-*" {
    redirect :copy "[email protected]";
    set "sent" "true";
}

if address :localpart :is ["To", "Cc"] "alias47" {
    redirect :copy "[email protected]";
    set "sent" "true";
}

if string :is "${sent}" "true" {
    discard;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.