我創建了一個小型的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