在 vps 上运行 odoo。
我尝试使用以下方式从经过验证的采购订单发送邮件:
sendMail = models.execute_kw(db, uid, password, 'purchase.order', 'action_rfq_send',[orderId],{'context' : {'send_rfq': False}})
models.execute_kw(db, uid, password, 'mail.compose.message', 'action_send_mail',[[sendMail['context']['default_template_id']]])
邮件配置并在手动触发时工作
第一个块是 sendMail 方法的输出打印
第二块是后面的 xmlrpc action_send_mail 的输出。
我一定是在 sendMail 或 action_send_mail 中缺少一个参数,但我找不到哪个。我也试过用 view_id 替换 default_template_id :
models.execute_kw(db, uid, password, 'mail.compose.message', 'action_send_mail',[[sendMail['context']['view_id']]])
可以通过 xml-rpc 使用邮件向导,但我不会使用它。
但是报错如下。您正在尝试使用邮件向导的
action_send_mail
,它需要当前向导 ID。但是您提供的 [sendMail['context']['view_id']]
(或 default_template_id
)不是巫师 ID。
action_send_mail
的方法purchase.order
以字典的形式返回一个动作。 odoo 窗口动作字典中唯一包含动作底层模型的实际 ID 的键/值对是res_id
,在这种情况下,它从来没有。那是因为Odoo为浏览器客户端做了那个方法...
那么你可以做什么呢?首先,您应该查看
action_send_mail
以了解在那里完成了什么以及您可以使用哪些值。浏览器和向导有很多东西。但是对于 xml-rpc 只有两件事是真正必要的:订单 ID 和邮件模板 ID。
您的示例代码中已经有了订单 ID
orderId
。对于 Odoo 15,向导使用了两个邮件模板。让我们坚持使用 xml id purchase.email_template_edi_purchase
的那个,稍后将在我的示例代码中使用它。
您现在可以使用 Odoo 的邮件模板功能使用两个 ID 发送邮件。
以下代码适用于 Odoo 15,可能不适用于旧版本。
# first get mail template id (either by xml id or you could hardcode it, but that's ugly)
mail_template_xml_id = "purchase.email_template_edi_purchase"
module, xml_id_name = mail_template_xml_id.split(".")
template_model, template_id = models.execute_kw(
db, uid, password, 'ir.model.data',
'check_object_reference',
[module, xml_id_name])
# send the mail by template
models.execute_kw(db, uid, password, template_model,
'send_mail',
[template_id, orderId])