我正在寻找一种在Sieve中实现的方法,这是我在Procmail中多年来一直在做的事情,即在传入的消息中插入明确的date标头,使我能够清楚地看到--独立于可能来自多个服务器的隐藏的“已接收”标头,以及无论我的邮件客户端如何解释消息的发送日期--当我的服务器接收消息时。这是我在Procmail中实现的方法:
# First create the "date_received" variable for my time zone:
date_received=`/bin/date -ud '+2 hour' +'%A %Y-%m-%d %H:%M:%S +0200'`
# Second, insert the header containing the date_received variable:
:0 fh w
| formail -i "X-Local-Date-Received: $date_received"我找到了"addheader“(RFC 5293),它显然会添加一个头部,但由于我读到的其他东西(对不起,不记得在哪里了),我认为Sieve不会在shell中运行"date”命令,原因要么是限制,要么是出于安全原因而有意(也可以理解)不运行shell命令。
其他可能有用的信息:我是通过Roundcube 1.3.6来做这件事的,但我有一种感觉(also due to something I read),如果我在Roundcube中编辑原始代码,Roundcube可能会覆盖自定义筛选器集。如果有必要,我很乐意直接在服务器上编辑或创建一个Sieve配置文件,为服务器上的所有用户实现这一点,但运行Sendmail和Procmail多年后,我不确定在哪里做最好。
编辑:
作为在Roundcube中的测试,我在我的筛子过滤器集的顶部添加了以下内容:
require ["fileinto","editheader"];
# rule:[test editheader]
if true
{
addheader "X-Test-Header" "This is a test header.";
}我实际上并没有添加"require "fileinto","editheader“;”行;我只是在过滤器集顶部的现有行中添加了“editheader”,如下所示:
require ["copy","fileinto","regex","editheader"];我希望这能增加...
X-Test-Header: This is a test header...。每条传入的消息,但Roundcube不让我保存它:
An error occurred.
Unable to save filter. Server error occurred.

搜索此错误将返回一个相关结果,但没有发布任何解决方案。
然而,我并不打算关注Roundcube。就像我之前说过的,如果需要的话,我会从命令行添加这个筛选器。
发布于 2018-10-04 20:56:11
默认情况下,文件筛子Editheader扩展不可用。对于每个its documentation,您需要确保将其添加到服务器上的sieve扩展列表中:
plugin {
# Use editheader
sieve_extensions = +editheader
}如果您想在Dovecot上使用sieve运行任意脚本,就像在procmail中一样,那么您可以使用它的external programs plugins,在Dovecot中配置您希望允许用户使用的外部程序,然后用户可以使用"vnd.dovecot.execute“扩展来运行这些程序。您可以使用它来移植您在procmail中使用的任何脚本。
在一般情况下,sieve的目的是让用户能够配置他们自己的邮件过滤,而看起来您实际上是在尝试为服务器做一些全局的事情。Dovecot应该在处理邮件时添加自己的Received头,这是标记邮件系统何时收到消息的标准方法,所以我不清楚为什么不使用它,也不清楚您想要对其默认行为进行哪些更改。您要做的事情可能更适合在邮件传输代理中处理,而不是在邮件递送代理中处理。
发布于 2019-04-08 06:32:21
下面是将Received转换为Date的sieve脚本
require "editheader";
require "regex";
require "variables";
if not exists "Date" {
if header :regex "Received" "^from[[:space:]]+.*[[:space:]]+by[[:space:]]+mail.mydomain.com[[:space:]]+with[[:space:]]+.*[[:space:]]+for[[:space:]]+.*;(.*)$" {
addheader :last "Date" "${1}";
}
}请注意,mail.mydomain.com是实际邮件服务器地址的替身,这意味着只有在特定邮件服务器上收到邮件时,它才与邮件头相匹配。我用dovecot-2.3.5.1完成了这项工作
https://stackoverflow.com/questions/52249918
复制相似问题