欢迎光临, 访客. 请先 登入註册一个帐号.
十二月 13, 2018, 07:19:17 上午
19594 文章 在 3864 主题 由 4580 会员
最新註册会员: aa123aa1
LifeType 中文开发论坛  |  开发  |  核心补强  |  修正 LifeType 1.2.2 在使用 smtp 传送信件时, 无法载入 class.smtp.php 的问题 « 上篇主题 下篇主题 »
页: [1]
作者 主题: 修正 LifeType 1.2.2 在使用 smtp 传送信件时, 无法载入 class.smtp.php 的问题  (阅读 7999 次)
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 的问题 « 上篇主题 下篇主题 »
    前往: