Odoo14自定义模块message_new方法不触发无法接收邮件问题咨询
问题根因
从系统日志可见,邮件路由规则配置是正确的,已经正常匹配到test.mailer模型,没有触发自定义逻辑的核心原因是message_new方法的定义不符合Odoo框架的要求:
- 模型方法缺失必填的第一个参数
self - 入参命名错误,你注释了正确的参数定义,误将第一个参数命名为
msg_dict,和框架调用时的入参规则不匹配 - 方法没有返回父类方法的执行结果,且没有处理必填字段
partner_id的赋值逻辑,就算触发也会因为必填字段为空报错
修正后的完整代码
from odoo import api, fields, models, tools, _ import logging _logger = logging.getLogger(__name__) class TestMailer(models.Model): _name = 'test.mailer' _inherit = ['mail.alias.mixin','mail.thread', 'mail.activity.mixin'] _description = 'Sort Email' name = fields.Char(string='Name') email_from = fields.Char(string='email from') email_cc = fields.Char(string='email cc') mail_body = fields.Text(string='mail body') partner_id = fields.Many2one('res.partner', 'Partner',required=True,select=True) @api.model def message_new(self, msg, custom_values=None): _logger.warning('hi i am message_new') # 处理必填字段partner_id:可根据发件人邮箱匹配已有联系人,没有的话可直接创建 partner = self.env['res.partner'].search([('email', '=', msg.get('email_from'))], limit=1) if not partner: partner = self.env['res.partner'].create({ 'name': msg.get('from'), 'email': msg.get('email_from') }) # 组装自定义字段值 custom_values = custom_values or {} custom_values.update({ 'name': msg.get('subject'), 'email_from': msg.get('email_from'), 'email_cc': msg.get('cc'), 'mail_body': msg.get('body'), 'partner_id': partner.id }) return super(TestMailer, self).message_new(msg, custom_values=custom_values)
注意事项
- 调用父类方法时入参名要和方法定义保持一致,不要混用
msg和msg_dict partner_id为必填字段,必须提前赋值,否则创建test.mailer记录时会抛出校验错误- 升级模块后再测试邮件接收即可看到自定义日志输出,同时会自动创建对应
test.mailer记录
内容的提问来源于stack exchange,提问作者Moaz Mabrok
相关产品推荐
相关产品推荐

