Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

修正 LifeType 1.2.2 在使用 smtp 傳送信件時, 無法載入 class.smtp.php 的問題
post by tommy @ 19 五月, 2007 13:20

昨天晚上把 LifeType 升級到 1.2.2 之後, 今天早上發現有人連續留了幾個相同的迴響, 但是.... 我的 MSN/Yahoo 帳號卻沒有收到任何的訊息. 檢查了一下伺服器上的記錄, 果然沒有執行到送出訊息的地方. 後來就自己試著產生一個新的迴響, 發現在 1.2.2 中, 會出現找不到 class.smtp.php 的錯誤. (所以沒有訊息, 而留言的人會以為不成功就再留一次, 所以產生多個相同的迴響.) 把 email 的傳送設定, 由 smtp 改成 PHP mail() 之後, 就可以正常使用了.

比較了一下 1.2.1 與 1.2.2 的部份, 發現在 phpmail 的部份, 1.2.2 使用了 lt_include() 取代 include_once() 來載入 class.smtp.php 檔案. 不過... 由於並沒有定義 phpmail 物件的 PluginDir 變數, 所以原本在執行 include_once($this->PluginDir.'class.smtp.php') 時, 會找目前路徑下的 class.smtp.php, 所以可以正常的載入. 不過改用 lt_include() 之後, 變成執行 lt_include('class.smtp.php'), 並沒有加上路徑, 而 lt_include() 定義在別的檔案, 也就是在別的路徑下頭, 在那裡頭去執行 include('class.smtp.php') 時, 變成只找該路徑, 而不是原本 phpmail 所在的路徑了. 自然會載入失敗.

經過下面的修正, 就可以避免這個問題:

diff -Nur lifetype-1.2.2/class/mail/emailservice.class.php blog/class/mail/emailservice.class.php
--- lifetype-1.2.2/class/mail/emailservice.class.php 2007-05-18 15:21:32.000000000 +0800
+++ blog/class/mail/emailservice.class.php 2007-05-19 13:17:24.650920201 +0800
@@ -95,6 +95,9 @@
// create a phpmailer object
$mail = new PHPMailer();
 
+ // need to set PluginDir if we use lt_include()
+ $mail->PluginDir = PLOG_CLASS_PATH."class/mail/phpmailer/";
+
// set a few fields
$mail->ContentType = $message->getMimeType();
$mail->From = $message->getFrom();

檔案可以由這兒抓取:
http://www.teatime.com.tw/~tommy/mypatch/lifetype_1.2.2_phpmail_smtp.patch  

這個修正同時送到 http://bugs.lifetype.net/view.php?id=1310

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 71 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS