歡迎光臨, 訪客. 請先 登入註冊一個帳號.
十一月 23, 2024, 11:43:38 上午
19595 文章 在 3865 主題 由 4579 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  開發  |  核心補強  |  修正 LifeType 1.2.2 在使用 smtp 傳送信件時, 無法載入 class.smtp.php 的問題 « 上篇主題 下篇主題 »
頁: [1]
作者 主題: 修正 LifeType 1.2.2 在使用 smtp 傳送信件時, 無法載入 class.smtp.php 的問題  (閱讀 13000 次)
twu2
初級會員
**
文章: 61



檢視個人資料 個人網站
« 於: 五月 19, 2007, 12:47:08 下午 »

昨天晚上把 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
已記錄

頁: [1]
LifeType 中文開發論壇  |  開發  |  核心補強  |  修正 LifeType 1.2.2 在使用 smtp 傳送信件時, 無法載入 class.smtp.php 的問題 « 上篇主題 下篇主題 »
    前往: