使用cron的电子邮件,包括来自moodle的电子邮件附件 [英] Email using cron and including attachment to email from moodle

查看:129
本文介绍了使用cron的电子邮件,包括来自moodle的电子邮件附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

>

我已经看过一些插件来了解它是如何完成的,但是我仍然不确定应该怎么做.

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

谢谢.

(我正在使用3.0版的情人)

解决方案

这是概述.

  1. 首先创建一个本地插件.例如/local/yourplugin

https://docs.moodle.org/dev/Local_plugins

  1. 然后设置一个消息提供程序

https://docs.moodle.org/dev/Message_API

defined('MOODLE_INTERNAL')|| die();

local/yourplugin/db/messages.php

$messageproviders = array (
    'coursecompleted' => array (
    ),

  1. 然后添加一个事件观察器-您将要响应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',
    ),

);

  1. 现在添加消息代码

在'/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);
    }
}

I would like to send emails only to users that have completed a specific course and add a pdf file (a certificate for completing the course) as attachment to the email, and do so at a specific time using moodle cron.

I have looked at some plugins to find out how it's done, but I'm still not sure how exactly I should do this.

I need:
1. to know how I would add an attachment to an email (and which API to use),
2. how I would use cron to send the emails to the desired group at a certain time,
3. how to retrieve users that have completed the course so that I could send emails (with attachment) to them.

Thanks in advance.

(I'm using moodle version 3.0)

解决方案

This is an overview.

  1. First create a local plugin. For example /local/yourplugin

https://docs.moodle.org/dev/Local_plugins

  1. Then set up a message provider

https://docs.moodle.org/dev/Message_API

defined('MOODLE_INTERNAL') || die();

in local/yourplugin/db/messages.php

$messageproviders = array (
    'coursecompleted' => array (
    ),

  1. Then add an event observer - you will want to respond to the course_completed event

https://docs.moodle.org/dev/Event_2

in /local/yourpluginname/db/events.php

have something like

$observers = array(

    array(
        'eventname'   => '\core\event\course_completed',
        'callback'  => 'local_yourplugin_observer::course_completed',
    ),

);

  1. Now add the message code

Add something like this to '/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);
    }
}

这篇关于使用cron的电子邮件,包括来自moodle的电子邮件附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆