使用cron发送电子邮件,包括moodle电子邮件的附件

时间:2016-01-26 09:16:36

标签: php cron moodle email-attachments moodle-api

我只想向已完成特定课程的用户发送电子邮件,并添加pdf文件(完成课程的证书)作为电子邮件的附件,并在特定时间使用moodle cron进行。

我已经查看了一些插件以了解它是如何完成的,但我仍然不确定我应该如何做到这一点。

我需要:
1.知道如何在电子邮件中添加附件(以及使用哪种API),
2.我将如何使用cron在特定时间将电子邮件发送到所需的组,
3.如何检索已完成课程的用户,以便我可以向他们发送电子邮件(附件)。

提前致谢。

(我正在使用moodle 3.0版)

1 个答案:

答案 0 :(得分:1)

这是一个概述。

  1. 首先创建一个本地插件。例如/local/yourplugin
  2. https://docs.moodle.org/dev/Local_plugins

    1. 然后设置消息提供程序
    2. https://docs.moodle.org/dev/Message_API

      定义('MOODLE_INTERNAL')||模具();

      local/yourplugin/db/messages.php

      中的

      $messageproviders = array (
          'coursecompleted' => array (
          ),
      
      1. 然后添加一个事件观察者 - 您将要响应course_completed事件
      2. https://docs.moodle.org/dev/Event_2

        /local/yourpluginname/db/events.php

        中的

        有类似

        的内容
        $observers = array(
        
            array(
                'eventname'   => '\core\event\course_completed',
                'callback'  => 'local_yourplugin_observer::course_completed',
            ),
        
        );
        
        1. 现在添加消息代码
        2. 将这样的内容添加到'/local/message/classes/observer.php'

          defined('MOODLE_INTERNAL') || die();
          
          class local_yourplugin_observer {
          
              /**
               * Triggered when 'course_completed' event is triggered.
               *
               * @param \core\event\course_completed $event
               * @return bool
               */
              public static function course_completed(\core\event\course_completed $event) {
          
                  // Your code here.
          
                  $message = new \core\message\message();
                  $message->component = 'local_yourplugin'; // Name of your local plugin.
                  $message->name = 'coursecompleted'; // Name of message provider.
                  $message->userfrom = $USER;
                  $message->userto = $user;
                  $message->subject = 'message subject 1';
                  $message->fullmessage = 'message body';
                  $message->fullmessageformat = FORMAT_MARKDOWN;
                  $message->fullmessagehtml = '<p>message body</p>';
                  $message->smallmessage = 'small message';
                  $message->notification = '0';
                  $message->contexturl = 'http://GalaxyFarFarAway.com';
                  $message->contexturlname = 'Context name';
                  $message->replyto = "random@example.com";
                  $content = array('*' => array('header' => ' test ', 'footer' => ' test ')); // Extra content for specific processor
                  $message->set_additional_content('email', $content);
          
                  // Create a file instance.
                  $usercontext = context_user::instance($user->id);
                  $file = new stdClass;
                  $file->contextid = $usercontext->id;
                  $file->component = 'user';
                  $file->filearea  = 'private';
                  $file->itemid    = 0;
                  $file->filepath  = '/';
                  $file->filename  = '1.txt';
                  $file->source    = 'test';
          
                  $fs = get_file_storage();
                  $file = $fs->create_file_from_string($file, 'file1 content');
                  $message->attachment = $file;
          
                  $messageid = message_send($message);
              }
          }