You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15中如何将Binary字段文件添加为邮件附件

实现方法

你只需要在现有代码基础上补全附件创建、传递逻辑,同时修正原有代码的语法问题即可,具体操作如下:

  • 修正原有代码错误:上下文中的default_model键名缺少字符串引号,会触发语法报错;另外你前面已经查询了自定义邮件模板和向导表单ID,后面多余的两行硬编码覆盖逻辑需要删除,否则你自定义的模板不会生效。
  • 生成附件并传递给向导:Odoo的Binary字段存储的是base64编码的文件内容,你可以先基于字段内容创建ir.attachment类型的附件记录,再把附件ID通过上下文传给邮件撰写向导,打开弹窗时就会自动带上这个XML附件。

修改后可直接运行的代码

def send_claim_batch(self):
    self.ensure_one()
    ir_model_data = self.env['ir.model.data']
    # 加载自定义邮件模板
    try:
        template_id = ir_model_data._xmlid_lookup('iemr_medical_aid.iemr_claim_batch_email')[2]
    except ValueError:
        template_id = False
    # 加载邮件撰写向导表单
    try:
        compose_form_id = ir_model_data._xmlid_lookup('mail.email_compose_message_wizard_form')[2]
    except ValueError:
        compose_form_id = False

    # 基于Binary字段内容创建邮件附件
    attachment = self.env['ir.attachment'].create({
        'name': 'claim_batch.xml', # 可自行修改附件展示的文件名
        'type': 'binary',
        'datas': self.batchfile,
        'res_model': 'iemr.claim.batch',
        'res_id': self.id,
        'mimetype': 'application/xml',
        'temp': True # 标记为临时附件,后续会被系统自动清理,不占用存储
    })

    ctx = {
        'default_model': 'iemr.claim.batch',
        'default_res_id': self.ids[0],
        'default_use_template': bool(template_id),
        'default_template_id': template_id,
        'default_composition_mode': 'comment',
        'mark_so_as_sent': True,
        'force_email': True,
        'default_attachment_ids': [(6, 0, [attachment.id])] # 把附件传给向导
    }
    return {
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'mail.compose.message',
        'views': [(compose_form_id, 'form')],
        'view_id': compose_form_id,
        'target': 'new',
        'context': ctx,
    }

可选优化

如果你的业务不需要弹出邮件撰写向导、要直接自动发送邮件,可以直接调用邮件模板的send_mail方法,把附件ID作为参数传入即可,不需要走向导弹窗逻辑。


内容的提问来源于stack exchange,提问作者Abraham Kalungi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:06:16