背景
我在虚拟机上运行 Ubuntu 16.04 LTS。它是一家小型医疗诊所的邮件服务器。我们正在尝试将邮件过滤从客户端移至服务器端,但在处理 $HOME/.mailfilter 规则文件时遇到了困难。
我已经在多个地方阅读了手册页的各种副本,但没有太多关于打开日志记录的信息。我正在使用的数据示例可以在这里找到:Maildrop 过滤器手册页
当前设置
我创建的包含过滤规则的三个文件包含非常简单的说明:
logfile "/var/log/maildropfilter.log"
log "Executing code in {file_path}"
当然,我将“{file_path}”更改为我当前所在的文件。我希望如果执行规则文件,则日志文件将有一个语句“在 {file_path} 中执行代码”,并且我将知道要将控制逻辑放入三个文件中的哪一个。
期待
根据文档,或者更确切地说是我对它的解释,在我的用户电子邮件帐户收到一封电子邮件后jaredclemence
,我应该在我的日志文件中看到以下内容:
Executing code in /etc/courier/maildroprc
Executing code in /home/jaredclemence/.mailfilter
我不应该看到对 Maildir 中第三个文件的任何引用,因为此文件不是$HOME/.mailfilter
,这是文档指向的文件。我创建此文件只是为了以防万一 $HOME 引用 Maildir 的根目录而不是用户帐户主文件夹的根目录。
当前结果
问题是,当我jaredclemence
从网络外部向用户发送电子邮件时,电子邮件确实被收到,但日志文件是空的。
我究竟做错了什么?
为了注册我的过滤规则,我需要做一些特别的事情吗,或者只需要将文件放在正确的位置吗?
如果只需将文件放在正确的位置,那么我编写的代码有什么问题,它设置了日志文件并使用命令将消息输出到日志
log
?
非常感谢您的帮助。
更新 2018-01-04 10:17
我阅读了 maildrop 手册文件并了解了它将运行的各种模式,并确定三种模式之一不使用 .mailfilter 规则。
注意到有一个手动模式,我在手动模式下执行了 maildrop 命令以查看日志文件是否被激活和利用。
手动运行 maildrop 命令后,我验证了以下输出:
Executing commands from /home/jaredclemence/.mailfilter
Date: Thu Jan 4 09:37:05 2018
From: Synegi Inc <[email protected]>
Subj: Wishing You a Happy New Year from Synegi!
File: /var/mail/jaredclemence (29594)
这很有趣,因为全局规则文件从未被激活。它也很有趣,因为它将邮件发送到 处的 mbox /var/mail/jaredclemence
,而不是 Maildir。
这表明了两种情况之一。要么 maildrop 程序不被用作本地投递代理,要么当 maildrop 程序在“嵌入模式”下运行时配置文件会更改投递位置,这是三种模式中唯一不执行文件指令的模式.mailfilter
。
从这里开始,我开始阅读 trace(8)、postfix(1) 和 local(8) 的手册页,看看是否可以追踪邮件传递代理正在使用哪个程序。
答案1
经过大量的研究和搜索,我发现我的系统没有使用 maildrop 进行传递。
如果您有同样的问题,请首先确定您的系统正在使用哪个邮件递送代理。
从您的 SMTP 服务器开始。我的是 Postfix。
Postfix 在名为 local(8) 的进程中使用自己的本地传递代理。在文件中/etc/postfix/main.cf
,查找对任何 local(8) 传递参数的各种引用。最突出的两个可能是mailbox_transport
或virtual_transport
(区别取决于接收邮件的人是否拥有带有主目录的帐户或是否虚拟维护帐户)。
如果没有设置这些参数,那么 postfix 可能正在处理其自己的本地传送,据我所知,postfix 不会进行基于检查的重定向和传送到特定的邮箱,而只会根据一系列转发或别名地址从一个电子邮件地址传送到另一个电子邮件地址。
因此,如果您尝试使用 Courier 或 Dovecot-LDA 或 Dovecot-LMTP 实现高级过滤,那么您将需要使用mailbox_transfer
或virtual_transfer
设置告诉 Postfix 调用哪个程序。