我已经用筛网过滤配置了 dovecot(我也配置了圆形立方体,但我认为这并不重要)。
它工作正常,我已经设置了一些过滤器。但是现在我有一个巨大的未过滤的 INBOX 文件夹,我不想手动过滤它。
有什么办法可以说:“嘿,筛子!扫描指定用户的指定文件夹并对其调用一些过滤器!” ?
为两种协议启用了 Sieve 作为插件:lda 和 lmtp:
protocol lda {
mail_plugins = $mail_plugins sieve
}
protocol lmtp {
postmaster_address = postmaster@example.com
mail_plugins = sieve
}
Run Code Online (Sandbox Code Playgroud) 对于我的邮件服务器,我有一个 dovecot、postfix 和筛选设置。
我的 maildir 中有数百封邮件,最近创建了一些筛选规则来对它们进行排序。不幸的是,筛选规则设计为仅适用于传入消息。因此我的问题:
如何对现有邮件目录中的邮件运行筛选?
谢谢
- - 编辑:
谢谢 larsks
通过您提供的链接,我最终使用了:
mkdir todo
mkdir done
mv cur/* todo
for i in todo/*; do
echo "Delivering message $i ..."
/usr/lib/dovecot/deliver -d mail@example.de < $i && mv $i done/
done
Run Code Online (Sandbox Code Playgroud)
这就像我的魅力一样。我可以为我创建的每个新过滤器重新运行此脚本。
我有大量传入的垃圾邮件伪装成由我发送,但在某个任意垃圾邮件发送者域中有一个发件人。例如
Return-Path: <admin@aiuw.com>
... (stuff elided, etc.)
Received: from [static-93.0.72.177-ttvi.com.br] (unknown [177.72.0.158])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
(Authenticated sender: admin@aiuw.com)
by Server22.lejj.com (Postfix) with ESMTPSA id B527943151
...
To: iain@example.com
From: <iain@example.com>
Run Code Online (Sandbox Code Playgroud)
postfix 的发件人是 admin@aiuw.com,但是当它交给 Cyrus-IMAP 时,它似乎是由我发送的,这意味着它已存入我认可的发件人收件箱。
我想阻止来自我的域的所有传入邮件(传出使用 TLS + SMTP AUTH,并绕过检查,所以我不担心阻止自己),但由于发件人地址不是来自我的域,我不能不要使用发件人拒绝规则或 SPF 来做到这一点 - 这些作用在 aiuw.com,而不是 example.com。
我猜没有办法让 Postfix 将 From 行作为信封信息的一部分来处理。是这样,还是我错过了什么?
如果不是,那么 Postfix 和 Cyrus-IMAP 之间的过滤器可以同时捕获发件人和发件人地址并拒绝不匹配吗?或者,最后,一种在 Sieve 脚本中检查发件人地址的方法,尽管我认为这会很快变得丑陋。
如果这是重复的,请道歉。我找到了几个点击,但我看到的一切都是基于信封发件人,而不是发件人。
其实很简单:我想将所有收到的电子邮件传递给一个 PHP 脚本,但只是作为副本,原始电子邮件仍应照常发送到邮箱。
我似乎无法让它工作。我试过以下
(1)创建一个catchall-alias(mysql):
@mydomain.tld pipe@mydomain.tld
Run Code Online (Sandbox Code Playgroud)
(2)在/etc/postfix/mailpipe.cf中创建regex-transport映射(基本意思是:适用于mydomain.tld的所有邮件)
/.*@mydomain\.tld/ mailpipe:
Run Code Online (Sandbox Code Playgroud)
(3)将其全部集成在 /etc/postfix/main.cf 中:
transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....
Run Code Online (Sandbox Code Playgroud)
(4)将传输添加到/etc/postfix/master.cf:
mailpipe unix - n n - - pipe
flags=FR user=localuser argv=/path/to/my/script.php
${nexthop} ${user}
Run Code Online (Sandbox Code Playgroud)
剧本:
#!/usr/bin/php -q
<?php
$file = '/home/localuser/pipe/log.log';
$input = file_get_contents('php://input');
file_put_contents($file, $input, FILE_APPEND | LOCK_EX);
Run Code Online (Sandbox Code Playgroud)
所以设置似乎有效,脚本在传入的电子邮件中被命中,但它$input
是空的(尽管适用于任何其他字符串)。正在处理电子邮件,然后将其删除/丢弃。所以这是我的两个问题:
如何从脚本访问电子邮件的内容?
如何防止电子邮件在处理后被丢弃?有没有办法像往常一样将一个副本传递到收件箱,另一个传递给脚本进行处理?