3

这是我如何配置 sieve 以将发送[nameA|nameB|nameC]@example.org到我的私人电子邮件地址的任何邮件转发的示例。

if address :localpart :is ["To","Cc","Bcc"]
 ["nameA", "nameB", "nameC"] {
    redirect "<my private email address>";
    stop;
}

但有时,电子邮件不会被转发,因为它被发送到的地址隐藏在“已接收”标题中的某个地方。

Received: from ###server### ([###ip_address###])
    by ###server### with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256)
    (Exim 4.84)
    (envelope-from <###email_address###>)
    id 1alDM0-0000yT-60
    for nameA@example.org; Wed, 30 Mar 2016 12:28:00 +0200

是否也有一种有效的方法可以在筛选规则中捕获这些电子邮件?

4

2 回答 2

2

你这里有一个 XY 问题。您在这里真正想要做的是根据要发送到的地址进行过滤,而不是标题中的地址。(尽管可能不直观,但标头中的地址可能与它被传递到的地址无关,这就是密件抄送的工作方式。)

针对实际 SMTP 信封进行测试的命令是envelope.

require "envelope";
if envelope :localpart :is "to" ["nameA", "nameB", "nameC"] {
    redirect "<my private email address>";
    stop;
}

这将处理发送到这些名称的所有邮件,无论它们是否显示在邮件标题中。

于 2017-05-23T15:13:10.520 回答
1

借助筛子的索引功能,您可以从 Received 标头中解析收件人地址。

对于 BCC 排序,我通常会执行以下操作:

require ["fileinto", "envelope", "variables", "mailbox", "index", "subaddress"];
...
if header :index 3 :matches "Received" "*<*@example.com>*" {   
  set :lower "foldername" "${2}";
  fileinto :create "inbox.${foldername}";
} elsif header :index 2 :matches "Received" "*<*@example.com>*" {       
  set :lower "foldername" "${2}"; 
  fileinto :create "inbox.${foldername}";
}
...

在我收到的邮件的 Received 标题中,地址设置在尖括号中,这就是我在上面的示例中选择模式的原因。

此外,有时 Received 标头的数量会有所不同,因此我至少测试了两个不同的标头。

于 2016-12-17T09:41:33.667 回答