解決Moodle在上傳用戶時沒法自動發送帳號密碼郵件

問題描述

因爲某些緣由,不能讓用戶進行註冊,只能有運營人員手動添加用戶,單個添加用戶比較麻煩,所以選擇使用上傳文件的形式來批量生成用戶,可是上傳用戶在不給定 password 字段時,應該生成密碼並通知用戶,可是最終結果是生成用戶成功了,郵件並無發出(郵件服務器已正確配置,除了上傳用戶沒法發送郵件外,其它添加用戶或者忘記密碼等操做均可以發送郵件),進過近一個星期對 moodle 源碼的研究,終於找到 問題所在並解決,特此記錄,望接下來遇到此問題的夥伴能儘快解決此問題!

Moodle簡介

簡介來自百度百科php

Moodle(Modular Object-Oriented Dynamic Learning Environment)是一個用於製做網絡課程或網站的軟件包。它是一個全球性的開發項目,用以支持社會建構主義(social constructionist)的教育框架。Moodle是一個自由的開源軟件 (在GNU 公共許可協議下),也就是說Moodle是有版權的,可是你有額外的自由。你能夠自由地複製、使用或者修改Moodle,前提條件是你贊成:爲他人提供代碼,沒有修改或刪除原有的版權和許可,以及將類似的版權應用於衍生的做品。

當前工做環境

  • 服務器:阿里雲Linux服務器 Apache
  • moodle版本: MOODLE_33_STABLE
  • 其它moodle所需環境包括PHPMySQL等和moodle官網安裝推薦一致,服務器路徑也一致

解決辦法

  • 鎖定問題文件git

    • 找到moodle目錄下 admin/tool/uploaduser/index.php
    • 該文件即是上傳用戶時全部操做流程的文件
  • 鎖定問題所在位置github

    • 滾動到831行左右,找到以下代碼:apache

      if ($user->password === 'to be generated') {
          set_user_preference('create_password', 1, $user);
      }
  • 解決問題服務器

    • 將以上代碼替換成以下代碼:網絡

      if ($user->password === 'to be generated') {
          setnew_password_and_mail($user);
          unset_user_preference('create_password', $user);
          set_user_preference('auth_forcepasswordchange', 1, $user);
      }
    • 代碼釋義:以前的代碼是隻生成了密碼,可是並未執行發送帳號密碼郵件給用戶,所以替換後的代碼會先執行發送帳號密碼郵件,在清除已設置的密碼,最後設置用戶登陸時強制修改密碼

問題總結

目前在本地和線上測試上傳單個或多個用戶都能正常發送郵件,目的算是達到了!
解決此問題花費了很多時間,也怪筆者對 PHP 只能算是個半吊子,還未正式開發過 PHP 項目
所以走了很多彎路,可是最後問題獲得解決,甚感欣慰!
*友情提示: 更改線上環境或測試環境代碼後,記得重啓服務器,例如當前環境就執行:service apache2 restart
相關文章
相關標籤/搜索