以下是我如何配置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有没有一种有效的方法来在筛子规则中捕获这些电子邮件?
发布于 2017-05-23 23:13:11
您在这里有一个XY问题。在这里,您实际要做的是根据发送到的地址进行过滤,而不是根据报头中的地址进行过滤。(尽管这可能不直观,但报头中的地址可能与它要发送到的地址无关,这就是Bcc的工作方式。)
针对实际SMTP信封进行测试的命令是envelope。
require "envelope";
if envelope :localpart :is "to" ["nameA", "nameB", "nameC"] {
redirect "<my private email address>";
stop;
}这将处理发送到这些名称的所有邮件,而不管它们是否显示在邮件头中。
发布于 2016-12-17 17:41:34
在筛子索引功能的帮助下,您可以从接收到的标头中解析出收件人地址。
对于密件抄送排序,我通常这样做:
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}";
}
...在我收到的邮件的报头中,地址被设置在尖括号中,这就是为什么我在上面的例子中选择了模式。
此外,有时收到的报头的数量会有所不同,因此我至少测试了两个不同的报头。
https://stackoverflow.com/questions/36306660
复制相似问题