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

   我这里提到的问题,是指在已经配置好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版,希望官方能作出修正。

修改后的脚本:

[原]修正Discuz 5.5计划任务邮件通知的Bug下载文件
点击这里下载文件
修复Discuz!论坛数据库
打开Discuz的“接收新回复邮件通知”功能
基于mysql 5.0的Discuz从2.5SP1升级到4.1的方法
论坛正式成立!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/112726.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论