使用 cron 发送电子邮件,包括来自 moodle 的电子邮件附件
Email using cron and including attachment to email from moodle
我想只向已完成特定课程的用户发送电子邮件,并添加 pdf 文件(完成课程的证书)作为电子邮件的附件,并在特定时间使用 moodle cron 执行此操作。
我查看了一些插件以了解它是如何完成的,但我仍然不确定我应该怎么做。
我需要:
1. 了解如何向电子邮件添加附件(以及使用哪个 API),
2.我如何使用cron在特定时间将电子邮件发送到所需的组,
3. 如何检索已完成课程的用户,以便我可以向他们发送电子邮件(带附件)。
提前致谢。
(我使用的是moodle 3.0版)
这是概述。
- 首先创建一个本地插件。例如
/local/yourplugin
https://docs.moodle.org/dev/Local_plugins
- 然后设置消息提供程序
https://docs.moodle.org/dev/Message_API
已定义('MOODLE_INTERNAL') ||死亡();
在local/yourplugin/db/messages.php
$messageproviders = array (
'coursecompleted' => array (
),
- 然后添加事件观察者 - 您将要响应 course_completed 事件
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',
),
);
- 现在添加消息代码
将类似的内容添加到“/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);
}
}
我想只向已完成特定课程的用户发送电子邮件,并添加 pdf 文件(完成课程的证书)作为电子邮件的附件,并在特定时间使用 moodle cron 执行此操作。
我查看了一些插件以了解它是如何完成的,但我仍然不确定我应该怎么做。
我需要:
1. 了解如何向电子邮件添加附件(以及使用哪个 API),
2.我如何使用cron在特定时间将电子邮件发送到所需的组,
3. 如何检索已完成课程的用户,以便我可以向他们发送电子邮件(带附件)。
提前致谢。
(我使用的是moodle 3.0版)
这是概述。
- 首先创建一个本地插件。例如
/local/yourplugin
https://docs.moodle.org/dev/Local_plugins
- 然后设置消息提供程序
https://docs.moodle.org/dev/Message_API
已定义('MOODLE_INTERNAL') ||死亡();
在local/yourplugin/db/messages.php
$messageproviders = array (
'coursecompleted' => array (
),
- 然后添加事件观察者 - 您将要响应 course_completed 事件
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',
),
);
- 现在添加消息代码
将类似的内容添加到“/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);
}
}