我正在尝试使用 postfix after 队列。基本上,我想看看我是否可以修改外发电子邮件。(我对收到的电子邮件一点也不感兴趣)。我做了以下事情(基于http://www.postfix.org/FILTER_README.html):
- 在 aws 上启动 ec2(ubuntu 16.04)
- 安装 postfix
- 使用用户过滤器创建过滤器
修改 master.cf,添加 -o content_filter=filter:dummy
smtp inet n - y - - smtpd -o content_filter=filter:dummy
在master.cf文件末尾添加过滤服务定义
过滤器 unix - nn - 10 管道标志=Rq 用户=过滤器 null_sender= argv=/home/ubuntu/run_filter.sh -f ${sender} -- ${recipient}
使用发送电子邮件
echo“ hello world”| mail -s“第二条消息”[电子邮件保护]
但过滤器并未被调用。电子邮件未经任何更改就被发送出去。
似乎我遗漏了一些非常基本的东西。如果有人能帮忙,谢谢!
答案1
可能是您php.ini
没有引用 sendmail 的正确路径。
您可以检查您的php.ini
文件或 apache 日志来确认这一点。
或者,您也可以使用绝对路径:
echo "Subject: test" | /usr/sbin/sendmail [email protected]
您也可以从命令行确认注册的路径:
which sendmail
祝你好运 :)
答案2
我可能错了,因为我不知道您的具体设置,但我认为这mail
不会通过 发送消息smtp
。您可以检查 postfix 日志,查看您的消息是否通过postfix/smtpd
或 通过接收postfix/pickup
。
我认为您可以配置邮件以使用 smtp,这取决于mail
您安装的内容(mailx、nail 等)。
答案3
这个答案并不能直接回答你的问题,但从长远来看可以给你更多帮助。
当我希望应用程序执行某项操作时,我会使用诸如strace
、tcpdump
/ wireshark
、perf
、之类的跟踪工具systemtap
。
在您的情况下,因为我希望mail
通过 TCP 或至少 Unix 套接字连接来发送电子邮件,所以我会在 下运行它strace
。
echo "hello world" | strace -f -e network mail -s "second message" [email protected]
-f
= 也遵循子进程。
-e network
= 仅跟踪与网络相关的系统调用。您可以使用它-e file
来查看使用了哪些文件。有关更多详细信息,请参阅strace(1)手册页