首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sieve中测试“已接收”电子邮件标头

在sieve中测试“已接收”电子邮件标头
EN

Stack Overflow用户
提问于 2016-03-30 18:51:18
回答 2查看 1.2K关注 0票数 3

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

代码语言:javascript
复制
if address :localpart :is ["To","Cc","Bcc"]
 ["nameA", "nameB", "nameC"] {
    redirect "<my private email address>";
    stop;
}

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

代码语言:javascript
复制
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

有没有一种有效的方法来在筛子规则中捕获这些电子邮件?

EN

回答 2

Stack Overflow用户

发布于 2017-05-23 23:13:11

您在这里有一个XY问题。在这里,您实际要做的是根据发送到的地址进行过滤,而不是根据报头中的地址进行过滤。(尽管这可能不直观,但报头中的地址可能与它要发送到的地址无关,这就是Bcc的工作方式。)

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

代码语言:javascript
复制
require "envelope";
if envelope :localpart :is "to" ["nameA", "nameB", "nameC"] {
    redirect "<my private email address>";
    stop;
}

这将处理发送到这些名称的所有邮件,而不管它们是否显示在邮件头中。

票数 2
EN

Stack Overflow用户

发布于 2016-12-17 17:41:34

在筛子索引功能的帮助下,您可以从接收到的标头中解析出收件人地址。

对于密件抄送排序,我通常这样做:

代码语言:javascript
复制
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}";
}
...

在我收到的邮件的报头中,地址被设置在尖括号中,这就是为什么我在上面的例子中选择了模式。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36306660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档