我有一个用于多个网站的 exim 电子邮件服务器。它为每个网站使用不同的 helo_data 主机字符串。每个适用主机字符串的 DNS 和 rDNS 均已正确设置。
我想要登录 exim mainlog,其中的主机字符串用于发送每封电子邮件。
这是可能的吗?如果不可能,我可以通过哪些方式知道 HELo 中每个电子邮件使用了哪个主机字符串?
谢谢
答案1
如果您可以在 ACL 阶段确定 helo 数据,则可以将其分配给$acl_m_...
变量 ( $acl_m_outbound_helo
),该变量可以在消息的生命周期内的任何位置引用。您可能希望在 DATA ACL 中执行此操作,完全基于发送者,而不是接收者。
然后,您可以log_message
在同一个 ACL 中使用该值来记录该值;它将与 Exim 消息 ID 一起进入主日志,以进行关联。然后在传输中,您只需引用该值$acl_m_outbound_helo
以用于连接。
答案2
不幸的是,没有内置方法将 helo_data 变量记录到 mainlog 文件中。
我可能使用的方法是,要么在消息路径中的某个位置添加一个钩子,将我正在寻找的数据记录到另一个文件中,并通过一些引用指向主日志文件中的条目(例如消息 ID),要么我会在每个网站的基础上设置一个单独的路由器和传输。用于发送邮件的传输在主日志文件中记录为 T=my_transport 值。
对于自定义日志记录,我已设法使用condition =
路由器中的值将收到的电子邮件详细信息插入数据库。您可以使用${run{<command> <args>}}
字符串扩展来实现此目的:
condition = ${run{/path/to/interpreter /path/to/custom/logging/script $sender_domain $message_exim_id}{1}{0}}
(未经测试)
路由器中的那段小代码将/path/to/custom/logging/script
使用解释器/path/to/interpreter
(/bin/sh、/usr/bin/perl 等)执行脚本,并将发送者的域名和 Exim 消息 ID 传递给它。
它相当重量级,因此在使用率很高的服务器上并不理想,但它可能只是起作用......
答案3
我建议你看看 Exim 的事件机制
该示例可以适用于记录消息而不是将记录保存在数据库中。