'Add the related record followers to the destination partner_ids if is not a private message.
Call mail_notification.notify to manage the email sending'

@api.multi
def _notify(self, force_send=False, send_after_commit=True, user_signature=True):

    group_user = self.env.ref('base.group_user')
    self_sudo = self.sudo()
    self.ensure_one()
    partners = (self.env['res.partner'] | self.partner_ids)
    channels = (self.env['mail.channel'] | self.channel_ids)
    if (self_sudo.subtype_id and self.model and self.res_id):
        followers = self.env['mail.followers'].sudo().search([('res_model', '=', self.model), ('res_id', '=', self.res_id)]).filtered((lambda fol: (self.subtype_id in fol.subtype_ids)))
        if self_sudo.subtype_id.internal:
            followers = followers.filtered((lambda fol: (fol.channel_id or (fol.partner_id.user_ids and (group_user in fol.partner_id.user_ids[0].mapped('groups_id'))))))
        channels = (self_sudo.channel_ids | followers.mapped('channel_id'))
        partners = (self_sudo.partner_ids | followers.mapped('partner_id'))
    else:
        channels = self_sudo.channel_ids
        partners = self_sudo.partner_ids
    if ((not self._context.get('mail_notify_author', False)) and self_sudo.author_id):
        partners = (partners - self_sudo.author_id)
    message_values = {'channel_ids': [(6, 0, channels.ids)], 'needaction_partner_ids': [(6, 0, partners.ids)]}
    if (self.model and self.res_id and hasattr(self.env[self.model], 'message_get_message_notify_values')):
        message_values.update(self.env[self.model].browse(self.res_id).message_get_message_notify_values(self, message_values))
    self.write(message_values)
    partners._notify(self, force_send=force_send, send_after_commit=send_after_commit, user_signature=user_signature)
    channels._notify(self)
    if self.parent_id:
        self.parent_id.invalidate_cache()
    return True
