![如何通过程序过滤消息内容,然后将其转发到另一个地址?](https://linux22.com/image/804444/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E7%A8%8B%E5%BA%8F%E8%BF%87%E6%BB%A4%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9%EF%BC%8C%E7%84%B6%E5%90%8E%E5%B0%86%E5%85%B6%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
在 qmail 中,您可以将其放在 .forward 文件中:
|/usr/local/bin/myfilter | forward [email protected]
这会将整个消息(包括标题)通过管道传输到程序myfilter
,然后将打印到其标准输出的消息转发到[电子邮件保护]。
但是,Exim 没有forward
程序,并且通常会忽略管道传输的输出。
如何使用 Exim .forward 文件做到这一点?
答案1
通过管道传输程序输出sendmail
。Exim 安装了该程序自己的实现。
|sh -c '/usr/local/bin/myfilter | /usr/sbin/sendmail -i [email protected]'
笔记:
- 您必须使用
sh
- Exim 将直接执行指示的程序,而不是通过 qmail 之类的 shell。需要一个 shell 来解析|
运算符。 - 指定的完整路径
sendmail
,因为在处理文件时,它/usr/sbin/
可能不会位于PATH
Exim 所运行的用户的路径中.forward
。 - 不要使用
-t
sendmail 标志。