我在服务器上使用 Postfix 来接收电子邮件。 当收到电子邮件时,我想触发一些 golang 代码。 我正在使用
inotify
软件包,并正在监视 Maildir/new
文件夹中是否有新传入电子邮件。
我仅监视文件夹上的
IN_CLOSE_WRITE
事件,但我发现它从未被触发。仅触发 IN_CREATE
事件。
我假设当我监视文件夹而不是文件时,它只看到创建文件事件(因为它们影响文件夹),而不是文件稍后发生的情况(关闭写入)。
但是我事先并不知道该文件的名称,它是由 Postfix 创建的临时文件,超出了我的控制范围,我不想只是休眠 1 秒钟,因为 Postfix 可能需要更长的时间才能完成写入,然后另一方面,如果我尝试在该文件上快速设置监视,我可能会与 Postfix 处于竞争状态,因为它可能会比我建立初始监视更快地完成电子邮件写入,我将无法区分文件创建、写入和关闭以及正在进行的写入,因为在此期间没有触发事件。
你会如何优雅地解决这个问题? 我不想睡觉,因为它不优雅,我无法确定要睡多久,我希望它尽可能短,而且我不想与 Postfix 处于任何竞争状态。
我相信 Postfix 可以轻松让您参与实际的交付事件。看看 Procmail 是如何做到的,甚至只是创建一个 Procmail 规则来在交付内容时运行您的脚本。
非常简短,在您的
.procmailrc
中,放入
:0c
| /path/to/your/binary
将每条传入消息的副本通过管道传输到您的二进制文件。