[解決] sendmail 錯誤訊息 5.3.0 unknown mailer error 139

No Comments /

某日在作一些主機昇級動作之後,sendmail 出現 5.3.0 unknown mailer error 139 的訊息,造成極大困擾。

因為筆者有把 gmail 信箱裡特定信件自動轉寄到公司郵件主機備份的設定,而這個錯誤會造成不正常的退件。不只是 gmail, 只要任何寄信到公司郵件主機的人,都會收到退件。

一開始,從字面上的訊息,以為是 mail.local 這支程式出現異常。因為連 sendmail 官方網頁都說這訊息是 mail.local 在異常時回傳的錯誤代碼。

#define EX_OK           0       /* successful termination */

#define EX__BASE        64      /* base value for error messages */

#define EX_USAGE        64      /* command line usage error */
#define EX_DATAERR      65      /* data format error */
#define EX_NOINPUT      66      /* cannot open input */
#define EX_NOUSER       67      /* addressee unknown */
#define EX_NOHOST       68      /* host name unknown */
#define EX_UNAVAILABLE  69      /* service unavailable */
#define EX_SOFTWARE     70      /* internal software error */
#define EX_OSERR        71      /* system error (e.g., can't fork) */
#define EX_OSFILE       72      /* critical OS file missing */
#define EX_CANTCREAT    73      /* can't create (user) output file */
#define EX_IOERR        74      /* input/output error */
#define EX_TEMPFAIL     75      /* temp failure; user is invited to retry */
#define EX_PROTOCOL     76      /* remote error in protocol */
#define EX_NOPERM       77      /* permission denied */
#define EX_CONFIG       78      /* configuration error */

#define EX__MAX 78      /* maximum listed value */

但卻一直找不到問題點。139?? 該不會是不同錯誤的組合?

這種不易監控程式執行步驟的機制最難找bug....(汗)

最後,只有一步一步來。

由於轉寄進來的程式是先經 .forward 檔將它 pipe 給一支 php 程式來處理(編碼,並寫入資料庫,然後將信件轉存)。

所以就用 forward_mails.php < some_mail_from_gmail.eml  把剛才收到的 gmail 郵件倒給處理程式看看~~~

驚!

竟然出現 Segmentation fault (core dumped)

這就怪了,之前明明都運作正常,用很久了。因此,讓我想到該不會是升級時加載的外掛有問題吧?

目標就指向了最後加入的 memcached 這個外掛了。

但奇怪的是,用 pecl install memcached 一切正常,而在 phpinfo 裡也看到它被載入了。

然而執行程式時,卻是因為它而出現異常,而這支程式裡卻完全沒用到 memcached。移除這支外掛後,上述的 Segmentation fault 就消失了。

所以結論就是 php 的外掛加載可能造成 php 程式的異常,這點需要特別留意。

Post to Twitter Post to Plurk Post to Digg Post to Facebook

Facebook comments:

Leave a Reply

You must be logged in to post a comment.