Manyou诚邀开发者加盟 | 常见问题
《站长》俱乐部官方群公布 城市联络员机会多多
立即免费下载 Discuz!7.0.0 正式版
安装升级指南 | 用户手册 | 新手建站学堂
基于.net架构的Discuz!NT2.6正式版发布
Comsenz公司2009年招贤纳士,期待您的加盟
Discuz!收费服务内容及价格
7月重庆、成都、西安三地社区运营实战特训速报名
Discuz!/UCHome 专用官方虚拟主机
牧场新服一起联运:豆浆机免费带回家
基于Discuz!的免费论坛空间5D6D
康盛创想《站长》俱乐部18城市互动之旅报名ing
返回列表 回复 发帖

修正Discuz 5.5计划任务邮件通知的Bug

我这里提到的问题,是指在已经配置好Email(邮件)发送功能后,存在的一个Bug:
也就是手动执行计划任务发送邮件正常,而由系统调用计划任务会发送带空的《》标题的邮件。
可通过下面的方式修正,并增加把新帖子内容信息一同附加到邮件中的功能。
一、现象描述
错误的情况:
但如果有系统自行通过计划任务发送“主题回复通知”,则会出现下面的问题:

二、修正并补充
经过多次的测试及观察Discuz中的脚本,基本可以判断,导致问题的原因,是由于计划任务中,并不能把notify_daily.inc.php脚本获取的变量附加到模版文件emails.lang.php中,所以才出现空变量的问题。而后台由admincp.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版,希望官方能作出修正。
4、更信息的信息,可见:
http://www.linuxfly.org/post/150.htm
谢谢。再弄呢
請問
在後台管理的介面下
如何找到
./include/crons/notify_daily.inc.php
這個擋呢?
请问有6.0.0的解决方式吗?
原帖由 花枝 于 2008-3-6 22:39 发表
请问有6.0.0的解决方式吗?
请问有6.0.0的解决方式吗?
目前6.1.0的新回覆郵件通知
這個功能似乎也還沒修正

因為訂閱後
所接收到的文章一樣沒有完整的tid
這也顯示這個BUG
官方網站一直為正視
谢谢楼主,这真是太有用了,帮你顶一下
顺便说一下,貌似我没有执行2、修改Bug这一步就成功了
真的吗?太好了,非常喜欢
有理,顶~~,此帖绝对要留名!强人辈出!
返回列表