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

使用OdooRPC发送Odoo签署请求时邮件无法送达的问题

问题描述

我通过OdooRPC在Odoo中发起签署请求,流程分为四步:

  • 上传待签署文档至Odoo
  • 配置文档内的签署字段(文本/签名字段)
  • 结合文档与Odoo联系人(签署人)准备邮件模板
  • 发送签署请求邮件

准备请求的代码:

request_fields = {
            'template_id': template_id,
            'signer_ids': [[0, 'virtual_25', {'role_id': 2, 'partner_id': employee_id1}],
                           [0, "virtual_37", {'role_id': 3, 'partner_id': employee_id2}]],
            'signer_id': False,
            'signers_count': 2,
            'has_default_template': True,
            'is_user_signer': False,
            'follower_ids': [[6, False, []]],
            'subject': 'Sign Request',
            'filename': 'document_to_sign.pdf',
            'message_cc': '<p><br></p>',
            'attachment_ids': [[6, False, []]],
            'message': '<p>Hi.</p><p>Sign this document, no reply</p>'
        }

# Prepare email request
sign_email = self.odoo.env['sign.send.request']
email_id = sign_email.create(request_fields)

发送请求的代码:

# Prepare email request
sign_email = self.odoo.env['sign.send.request']
email_id = sign_email.create(request_fields) # int type

request_sign = sign_email.send_request(email_id)

接口返回无报错:

{'name': 'file_name.pdf', 'type': 'ir.actions.client', 'tag': 'sign.Document', 'context': {'id': 1234, 'token': 'abcd-1234-efgh-5678', 'sign_token': None, 'create_uid': 9, 'state': 'sent', 'request_item_states': {'1234': False, '1235': False}}}

问题:调用send_request方法后,Odoo后台已生成邮件,但邮件并未送达至指定收件人邮箱。


排查与解决方案

1. 检查Odoo邮件服务器配置

  • 进入Odoo后台「设置」>「技术」>「邮件」>「邮件服务器」,确认已正确配置 outgoing邮件服务器(SMTP),包括主机、端口、认证信息、加密方式(SSL/TLS)。
  • 点击「测试连接」验证服务器是否能正常发送邮件,若测试失败,优先修复邮件服务器配置问题。

2. 验证签署人邮箱信息

  • 检查employee_id1和employee_id2对应的res.partner记录,确认email字段已正确填写且格式有效。Odoo不会向无邮箱的联系人发送邮件。
  • 若联系人邮箱为空或格式错误,补充正确邮箱后重新发起请求。

3. 查看邮件队列与服务器日志

  • 进入「设置」>「技术」>「邮件」>「邮件队列」,查看是否有处于「待发送」或「发送失败」状态的邮件:
    • 若邮件在队列中未发送,可手动点击「立即发送」测试,同时检查Odoo邮件发送守护进程是否正常运行。
    • 若显示发送失败,查看失败原因(如收件人拒收、SMTP认证失败等),针对性修复。
  • 查看Odoo服务器日志(通常在/var/log/odoo/或指定日志目录),搜索邮件相关报错信息,定位具体问题。

4. 确认权限与请求参数

  • 检查request_fields中的signer_ids配置:确保role_id对应的签署角色已正确配置,且角色关联的通知方式为邮件。
  • 确认执行OdooRPC的用户拥有sign.send.request模型的创建和发送权限,以及访问res.partner、sign.template等相关模型的权限。权限不足可能导致邮件生成但无法触发发送。

5. 优化代码逻辑

  • 当前发送请求的代码中重复调用了create方法,可能创建了重复的请求记录,导致实际发送的是未正确配置的请求。优化代码,复用之前创建的email_id:
    # 优化后的代码
    sign_email = self.odoo.env['sign.send.request']
    email_id = sign_email.create(request_fields)
    request_sign = sign_email.send_request(email_id)
    

6. 测试手动发送流程

  • 在Odoo后台手动创建并发送相同的签署请求,观察是否能正常送达。若手动发送正常,说明问题出在OdooRPC的代码逻辑或参数配置上,可对比手动创建的请求字段,调整代码中的request_fields参数。

内容的提问来源于stack exchange,提问作者Juan Botero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:05:13