Odoo V17使用mail_composer_cc_bcc发送带BCC邮件失败排查
我在Odoo V17中使用OCA插件mail_composer_cc_bcc发送带BCC的邮件,自定义代码如下:
def send_email_participant(self): self.ensure_one() template = self.env.ref('training_mdf.email_template_session_participants') seances_ids = self.seance_ids.mapped('participant_ids') partner_ids = seances_ids.mapped('partner_id') + self.subscription_ids.mapped( 'participant_id') + self.subscription_ids.mapped('formation_center') ctx = { 'default_model': 'training.session', 'default_res_ids': self.ids, 'default_use_template': bool(template.id), 'default_template_id': template.id, 'default_composition_mode': 'comment', 'default_partner_bcc_ids': [(6, 0, partner_ids.ids)], 'default_freeze_partner_ids': True, } return { 'type': 'ir.actions.act_window', 'view_mode': 'form', 'res_model': 'mail.compose.message', 'views': [(False, 'form')], 'view_id': False, 'target': 'new', 'context': ctx, }
运行后通过mail.compose.message向导发送邮件无报错,但出站邮件服务器返回错误:
Unknown error: There may be at most 1 Bcc headers in a message
排查思路
检查BCC收件人列表是否重复
先确认partner_ids中是否存在重复ID,重复收件人可能导致插件生成邮件头时重复添加BCC字段。可在代码中添加去重处理:partner_ids = partner_ids.unique(),同时过滤掉无邮箱的联系人:partner_ids = partner_ids.filtered(lambda p: p.email)。排查邮件模板的BCC配置
打开调用的模板training_mdf.email_template_session_participants,检查模板自身是否已设置BCC收件人。若模板已配置BCC,再加上代码传入的default_partner_bcc_ids,会导致邮件生成时重复添加BCC头,触发服务器报错。验证插件兼容性
确认mail_composer_cc_bcc插件是否完全适配Odoo V17版本,部分OCA插件在新版本中可能存在未修复的兼容性问题,导致BCC字段处理逻辑异常。可切换到插件的V17分支重新安装测试。调试邮件头生成逻辑
在mail.mail模型的send方法中添加日志,打印实际生成的邮件头信息,确认是否存在多个Bcc条目。例如添加代码:import logging _logger = logging.getLogger(__name__) _logger.info(f"Generated mail headers: {self.headers}")通过日志排查头信息重复的具体原因。
调整发送模式参数
当前代码设置default_composition_mode为comment,尝试改为mass_mail测试。不同发送模式下Odoo处理收件人的逻辑不同,mass_mail模式更适配批量BCC发送场景,可避免重复生成BCC头。
内容的提问来源于stack exchange,提问作者Dialy

