我创建了一个小型的shell脚本,它将所有的输入记录到一个日志文件中,我以为我可以替换sendmail二进制文件,从而实现了一种简单的方法来模拟电子邮件传递设置一个可用的sendmail。用虚拟脚本模拟sendmail
但是,这失败了。原因我不明白。我已经看了PHP的mail.c源码,并且据我所知(介意你,我在C中不是很有经验),PHP执行并直接与二进制文件进行通信(在sendmail_path
中设置)。但是,当我使用脚本替换sendmail二进制文件时,没有创建日志文件,并且脚本替换sendmail将在执行时始终创建日志文件,而不管是否存在输入。
该脚本本身工作正常。它的'返回代码应该符合sendmail的。不同之处在于我的脚本总是返回0,不管输入是什么,因为我并不是真的有兴趣检查输入是否有效 - 只是我正在得到一些输入。
是否有可能实现我想要的,即使用sendmail模拟器?
脚本源提供如下:
#!/bin/bash
LOGDIR=/tmp/sendmail-sim
NOW=$(date +%Y%m%dT%H%M)
CNT=1
FILENAME="$LOGDIR/$NOW.$CNT.log"
while [ -f $FILENAME ]; do
CNT=$(($CNT + 1))
FILENAME="$LOGDIR/$NOW.$CNT.log"
done
echo "$0 $*" > $FILENAME
while read BUF
do
echo $BUF >> $FILENAME
done
exit 0
PS。我目前的sendmail(或者实际上,postfix)确实收到来自PHP的电子邮件,但我不想实际发送任何电子邮件或需要在其开发中的邮件队列中进行挖掘。
确认 - 您的sendmail脚本在从命令行调用时起作用,但不能从PHP中调用?我不知道PHP运行时如何工作,但我想知道它是否试图链接邮件二进制对象,而不是托管到Unix环境? – JulesLt 2010-09-14 16:36:14
是的,它的工作原理。我还没有尝试过使用邮件命令。 (现在在电车上,但会很快测试。) – 2010-09-14 16:47:16
@Jules:我现在使用'mail'命令测试了我的脚本,并且可以确认它的工作原理。现在我修改了脚本,它甚至可以正常工作。 (第一个版本,即使它工作了,只读'stdin',直到一个空行,这导致消息部分被省略。) – 2010-09-14 17:31:37