当前位置: 首页 > 后端技术 > PHP

解决Moodle上传用户时不能自动发送账号密码邮件的问题

时间:2023-03-29 18:16:09 PHP

问题描述由于某些原因,无法注册用户,只能操作员手动添加用户。单独添加用户比较麻烦,所以选择使用上传文件的形式来批量生成用户,但是当上传用户没有指定密码字段时,应该生成密码并通知用户,但是最后的结果是用户生成成功,邮件发不出去(邮件服务器已经配置正确,除了上传用户不能发邮件,其他操作如添加用户或忘记密码都可以发邮件),经过近一周的研究在moodle的源码上,终于找到问题并解决了,特此记录,希望遇到此问题的小伙伴尽快解决!百度百科对Moodle的介绍Moodle(ModularObject-OrientedDynamicLearningEnvironment)是一个制作在线课程或网站的软件包。这是一个支持社会建构主义教育框架的全球发展项目。Moodle是免费的开源软件(在GNU公共许可证下),这意味着Moodle受版权保护,但您拥有额外的自由。您可以自由复制、使用或修改Moodle,前提是您同意:在不修改或删除原始版权和许可的情况下将代码提供给他人,并将类似的版权应用于衍生作品。当前工作环境服务器:阿里云Linux服务器Apachemoodle版本:MOODLE_33_STABLEmoodle所需的其他环境包括PHP、MySQL等,与moodle官网的安装推荐一致,服务器路径也一致。.php文件是上传用户时所有操作进程的文件锁定问题所在。滚动到831行左右,找到如下代码:if($user->password==='tobegenerated'){set_user_preference('create_password',1,$user);}解决问题把上面的代码换成以下代码:if($user->password==='tobegenerated'){setnew_password_and_mail($user);unset_user_preference('create_password',$user);set_user_preference('auth_forcepasswordchange',1,$user);}代码解释:之前的代码只是生成了密码,并没有向用户发送账号密码邮件,所以替换后的代码会先执行账号密码邮件,清除setpassword,最后设置用户登录时修改的密码。问题总结目前本地和线上测试,单个或多个用户都可以正常发送邮件,达到目的!解决这个问题花了很多时间,也怪作者是一个半生不熟的PHP项目。本人还没有正式开发过PHP项目,所以走了很多弯路,不过最终还是解决了问题,很欣慰!*友情提示:更改线上环境或测试环境代码后,记得重启服务器,例如在当前环境下执行:serviceapache2restart