我这里提到的问题,是指在已经配置好Email(邮件)发送功能后,存在的一个Bug:也就是手动执行计划任务发送邮件正常,而由系统调用计划任务会发送带空的《》标题的邮件。可通过下面的方式修正,并增加把新帖子内容信息一同附加到邮件中的功能。
一、现象描述
可以参考这里的方法配置后台邮件设置。当正确配置后,请确认能正确发送邮件。
正常的情况:
在“管理后台”-“其他设置”-“计划任务”中,选择“主题回复通知”,会激活notify_daily.inc.php脚本,请发送正常的通知邮件:
错误的情况:
但如果有系统自行通过计划任务发送“主题回复通知”,则会出现下面的问题:
二、修正并补充
经过多次的测试及观察Discuz中的脚本,基本可以判断,导致问题的原因,是由于计划任务中,并不能把notify_daily.inc.php脚本获取的变量附加到模版文件emails.lang.php中,所以才出现空变量的问题。而后台由admincp.php手动执行的脚本,是可以正确赋值的。
虽然找到了原因,但由于我基本对php不懂,只能以最简单的方式来修改了。
文件的路径在这里:
1、增加message信息
把原来的:
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”);
修改为:
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
把原来的:
注释掉或删除,然后加入:
$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、结果
修改后,计划任务和手动执行的结果如下:
三、补充说明
2、从现象来分析,该问题可能存在于其他从计划任务调用模版的脚本中,例如:birthdays_daily.inc.php,但时间关系,没有仔细调整;
3、到目前为止,该Bug存在于Discuz 2.5到最新的6.0 RC1版,希望官方能作出修正。
修改后的脚本:
打开Discuz的“接收新回复邮件通知”功能
基于mysql 5.0的Discuz从2.5SP1升级到4.1的方法
论坛正式成立!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/112726.html