def compile(cls, message, messenger, dispatch=None):
        """Compiles and returns a message text.

        Considers `use_tpl` field from message context to decide whether
        template compilation is used.

        Otherwise a SIMPLE_TEXT_ID field from message context is used as message contents.

        :param Message message: model instance
        :param MessengerBase messenger: MessengerBase heir instance
        :param Dispatch dispatch: model instance to consider context from
        :return: str
        :rtype: str
        """
        if message.context.get('use_tpl', False):
            context = message.context
            context.update({
                'SITE_URL': get_site_url(),
                'directive_unsubscribe': cls.get_unsubscribe_directive(message, dispatch),
                'directive_mark_read': cls.get_mark_read_directive(message, dispatch),
                'message_model': message,
                'dispatch_model': dispatch
            })
            context = cls.get_template_context(context)
            return render_to_string(cls.get_template(message, messenger), context)
        return message.context[cls.SIMPLE_TEXT_ID]
Compiles and returns a message text.

        Considers `use_tpl` field from message context to decide whether
        template compilation is used.

        Otherwise a SIMPLE_TEXT_ID field from message context is used as message contents.

        :param Message message: model instance
        :param MessengerBase messenger: MessengerBase heir instance
        :param Dispatch dispatch: model instance to consider context from
        :return: str
        :rtype: str