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

Odoo v10问题:表单提交后邮件未发送给当前登录用户

解决Odoo网站表单提交邮件发送至管理员而非登录用户的问题

看起来你遇到的核心问题是邮件模板里的user变量没有正确指向提交表单的网站登录用户,反而取到了管理员的信息。我结合Odoo网站和服务器动作的常见坑,给你几个具体的排查和解决步骤:

1. 检查服务器动作的运行身份

这是最容易忽略的关键点:Odoo的服务器动作默认可能是以管理员身份运行的,这时候模板里的user变量对应的就是管理员用户,自然会发送到管理员邮箱。

解决方法:

  • 打开你的服务器动作,找到「运行方式」选项(一般在动作设置的底部区域)
  • 选择「以触发动作的用户身份」,而非「以管理员身份」
  • 保存后重新测试,这时候user变量应该会指向提交表单的网站用户

2. 修正邮件模板的变量取值

有时候即使切换了运行身份,user变量在网站上下文里也不如website_user可靠(因为user可能还是后台的用户上下文),或者你应该直接从表单提交的记录里取邮箱(更稳妥,还支持未登录用户提交的场景):

场景1:仅针对已登录网站的用户

把模板改成使用website_user变量,这是Odoo网站专门用来存储当前前端登录用户的上下文变量:

${(website_user.email and '%s <%s>' % (website_user.name, website_user.email) or '')|safe}

场景2:支持未登录用户提交表单(更通用)

如果你的表单允许未登录用户填写邮箱提交,直接从表单对应的业务记录里取邮箱字段会更可靠。比如你的表单关联的是crm.lead模型,默认会把用户填写的邮箱存在email_from字段里,模板可以写成:

${(object.email_from or '')|safe}

这里的object就是表单提交后创建的那条业务记录,直接取它的邮箱字段能确保拿到用户实际填写的内容。

3. 验证表单字段映射是否正确

确保网站表单的邮箱输入框,已经正确映射到了目标模型的对应字段:

  • 打开网站构建器的表单编辑界面
  • 找到邮箱输入字段,检查它的「字段」设置(比如是否选择了email_from或者你自定义的邮箱字段)
  • 如果映射错误,记录里就不会存储用户的邮箱,模板自然取不到正确的值

4. 调试变量取值(可选)

如果还是不确定问题出在哪,可以在服务器动作里加一段调试代码,看看变量实际的值:

# 在服务器动作的Python代码开头添加
raise Warning(f"user.email: {user.email}, website_user.email: {website_user.email}, object.email_from: {object.email_from}")

提交表单后会弹出警告框,显示各个变量的实际值,这样就能快速定位是哪个变量没取到正确的邮箱。

按照这些步骤排查,应该就能解决邮件发送到错误邮箱的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:18:59