odoo 评论自动发送邮件异常

记录一下工作中遇到的一个奇怪问题
在一个离职员工创建的记录下发送评论会自动发送邮件,因为我们系统没有配置邮件所以出现了报错

  1. 因为不使用odoo的邮件系统所以个人首选项中全部员工设置的都是通知在odoo内处理


    image.png

    2.测试正常员工记录下的评论都是正常的

省略debug的过程
最终问题出在/addons/mail/models/mial_thread.py_notify_compute_recipients方法中

        for pid, cid, active, pshare, ctype, notif, groups in res:
            if pid and pid == author_id and not self.env.context.get('mail_notify_author'):  # do not notify the author of its own messages
                continue
            if pid:
                if active is False:
                    continue
                pdata = {'id': pid, 'active': active, 'share': pshare, 'groups': groups or []}
                if notif == 'inbox':
                    recipient_data['partners'].append(dict(pdata, notif=notif, type='user'))
                elif not pshare and notif:  # has an user and is not shared, is therefore user
                    recipient_data['partners'].append(dict(pdata, notif=notif, type='user'))
                elif pshare and notif:  # has an user but is shared, is therefore portal
                    recipient_data['partners'].append(dict(pdata, notif=notif, type='portal'))
                else:  # has no user, is therefore customer
                    recipient_data['partners'].append(dict(pdata, notif=notif if notif else 'email', type='customer'))
            elif cid:
                recipient_data['channels'].append({'id': cid, 'notif': notif, 'type': ctype})

在这段代码中判断了发送消息的类型,第一个是判断是过滤自身,第二个判断是过滤归档的伙伴(注意是res.partner表)
第三个连环判断是用户/门户/客户类型,如果是客户且没有notify值下那么将默认发送邮件类型消息,这里就是罪魁祸首

一开始我以为是官方给的判断不够严谨导致将离职员工判断为了客户导致错误,后来回头看到第二个判断发现为什么这里没有过滤掉,然后查找一下数据库,发现所有离职员工的res.partner表都没有归档,对于我们公司来说没有用到odoo自身的进销存所以对这张表的关注不够,对于入职员工我们默认都是创建员工表和用户表,离职后就将这两张表归档,忽视了partner表导致出现本次问题

你可能感兴趣的:(odoo 评论自动发送邮件异常)