Aug 20

[原]修正Discuz 5.5计划任务邮件通知的Bug 不指定

linuxing , 17:36 , 其他 » 杂七杂八 , 评论(1) , 引用(0) , 阅读(27790) , Via 本站原创 | |
   我这里提到的问题,是指在已经配置好Email(邮件)发送功能后,存在的一个Bug:也就是手动执行计划任务发送邮件正常,而由系统调用计划任务会发送带空的《》标题的邮件。可通过下面的方式修正,并增加把新帖子内容信息一同附加到邮件中的功能。
一、现象描述
可以参考这里的方法配置后台邮件设置。当正确配置后,请确认能正确发送邮件。
正常的情况:
在“管理后台”-“其他设置”-“计划任务”中,选择“主题回复通知”,会激活notify_daily.inc.php脚本,请发送正常的通知邮件:
点击在新窗口中浏览此图片
错误的情况:
但如果有系统自行通过计划任务发送“主题回复通知”,则会出现下面的问题:
点击在新窗口中浏览此图片

二、修正并补充
经过多次的测试及观察Discuz中的脚本,基本可以判断,导致问题的原因,是由于计划任务中,并不能把notify_daily.inc.php脚本获取的变量附加到模版文件emails.lang.php中,所以才出现空变量的问题。而后台由admincp.php手动执行的脚本,是可以正确赋值的。
虽然找到了原因,但由于我基本对php不懂,只能以最简单的方式来修改了。
文件的路径在这里:
引用
./include/crons/notify_daily.inc.php

1、增加message信息
把原来的:
引用
$query = $db->query("SELECT t.tid, t.subject, t.author, t.lastpost, t.lastposter, t.views, t.replies, m.username, m.email, m.uid
   FROM {$tablepre}subscriptions s, {$tablepre}members m, {$tablepre}threads t
   WHERE s.lastpost>s.lastnotify AND m.uid=s.uid AND t.tid=s.tid");

修改为:
引用
$query = $db->query("SELECT t.tid, t.subject, t.author, t.lastpost, t.lastposter, t.views, t.replies, m.username, m.email, m.uid, o.message
   FROM {$tablepre}subscriptions s, {$tablepre}members m, {$tablepre}threads t, {$tablepre}posts o
   WHERE s.lastpost>s.lastnotify AND m.uid=s.uid AND t.tid=s.tid AND s.tid=o.tid AND s.lastpost=o.dateline");

其作用是,从cdb_posts表中,获取message信息,以便后面附加到邮件中。
2、修改Bug
把原来的:
引用
sendmail(implode(',', $sub['emails']), 'email_notify_subject', 'email_notify_message');

注释掉或删除,然后加入:
引用
$subject =   "《$thread[subject]》新回复通知";
$message =   "
   您好,
   这封信是由 $bbname 发送的。

    您收到这封邮件,是因为您订阅的以下主题在最近有了新的回复,请您留意。
    如果您并没有访问过我们的论坛,或没有进行上述操作,请忽略这封邮件。
    您不需要退订或进行其他进一步的操作。

     ----------------------------------------------------------------------
     主题信息
     ----------------------------------------------------------------------
     URL:  {$boardurl}viewthread.php?tid=$thread[tid]
     标题: $thread[subject]
     作者: $thread[author]
     查看: $thread[views]
     回复: $thread[replies]
     内容:
     $thread[message]

      该主题最近一次由 $thread[lastposter] 于 $thread[lastpost] 回复。

       您订阅的主题可能有更多的回复,为了及时提醒您的留意,我们将会再一定时间内
       发送新回复通知。若在此期间如果还有新回复,将在下次一并通知。
       若由此给您的邮箱带来负担,请谅解。当然,您也可暂时取消“回复通知”功能。



          此致

           $bbname 管理团队.
           $boardurl";

   sendmail(implode(',', $sub['emails']), $subject, $message);

保存即可。
3、结果
修改后,计划任务和手动执行的结果如下:
点击在新窗口中浏览此图片

三、补充说明
引用
1、虽然通过上面的方法可以解决该Bug,但更好的方法应该是修改Discuz中引用计划任务的脚本,但由于我对php不熟,而且也没时间详细分析Discuz的架构,暂时只能做到这样了;
2、从现象来分析,该问题可能存在于其他从计划任务调用模版的脚本中,例如:birthdays_daily.inc.php,但时间关系,没有仔细调整;
3、到目前为止,该Bug存在于Discuz 2.5到最新的6.0 RC1版,希望官方能作出修正。

修改后的脚本:
Tags:
花枝 Email Homepage
2008/03/09 10:38
請問有6.0.0版的解決方式嗎
期待
linuxing 回复于 2008/03/10 09:57
不好意思,我暂时没有使用过6.0版本,但该方法我在6.0RC1上看过,应该是相同的。建议你可以参考方法试试。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]