Schedules a message or messages.

    :param MessageBase|str|list messages: str or MessageBase heir or list - use str to create PlainTextMessage.
    :param list|None recipients: recipients addresses or Django User model heir instances
        If `None` Dispatches should be created before send using `prepare_dispatches()`.
    :param User|None sender: User model heir instance
    :param int priority: number describing message priority. If set overrides priority provided with message type.
    :return: list of tuples - (message_model, dispatches_models)
    :rtype: list

def schedule_messages(messages, recipients=None, sender=None, priority=None):
    """Schedules a message or messages.

    :param MessageBase|str|list messages: str or MessageBase heir or list - use str to create PlainTextMessage.
    :param list|None recipients: recipients addresses or Django User model heir instances
        If `None` Dispatches should be created before send using `prepare_dispatches()`.
    :param User|None sender: User model heir instance
    :param int priority: number describing message priority. If set overrides priority provided with message type.
    :return: list of tuples - (message_model, dispatches_models)
    :rtype: list
    """
    if not is_iterable(messages):
        messages = (messages,)

    results = []
    for message in messages:
        if isinstance(message, six.string_types):
            message = PlainTextMessage(message)

        resulting_priority = message.priority
        if priority is not None:
            resulting_priority = priority
        results.append(message.schedule(sender=sender, recipients=recipients, priority=resulting_priority))

    return results