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

如何在Odoo 14中通过Python向招聘第一阶段的求职者发送邮件

Odoo14 向招聘第一阶段求职者发送邮件实现方案

原有代码问题梳理

你的原始代码存在几处逻辑错误和未定义项,修正后即可正常运行:

  • 循环内误用self调用属性,应该使用遍历变量获取单条记录的属性
  • 直接使用未定义的emai_sent变量,既没有对应字段声明也存在拼写错误
  • 缺少「求职者当前处于第一阶段」的判断逻辑,只会查询第一阶段ID不会匹配申请人当前状态
  • 没有发送成功标记逻辑,会出现重复发送邮件的问题

最终可运行代码

建议将该方法定义在hr.applicant(求职者)模型下,代码如下:

def job_applicant_acknowledgments(self):
    for applicant in self:
        # 查询当前职位对应的第一招聘阶段,兼容全局通用阶段和职位专属阶段
        first_stage = self.env['hr.recruitment.stage'].search([
            '|',
            ('job_ids', '=', False),
            ('job_ids', '=', applicant.job_id.id)],
            order='sequence asc',
            limit=1
        )
        # 校验条件:有关联联系人、存在第一阶段、当前处于第一阶段、未发送过确认邮件
        # 注意:email_sent为需提前新增的自定义布尔字段,默认值False,用于避免重复发信
        if applicant.partner_id and first_stage and applicant.stage_id == first_stage and not applicant.email_sent:
            # 组装邮件上下文参数
            mail_ctx = {
                'email_to': applicant.partner_id.email,
                'send_email': True,
                'partner_id': applicant.partner_id.id
            }
            # 加载自定义邮件模板,需保证xml id和你后台创建的模板一致
            mail_template = self.env.ref('hr_recruitment_custom.job_applicant_acknowledgment')
            # 执行邮件发送
            mail_template.with_context(mail_ctx).send_mail(
                applicant.id,
                force_send=True,
                raise_exception=True
            )
            # 标记已发送,避免重复触发
            applicant.write({'email_sent': True})

配套配置要求

  • 在hr.applicant模型中新增布尔类型字段email_sent,默认值为False,用于标记邮件发送状态
  • 在Odoo后台创建对应邮件模板,xml id设置为hr_recruitment_custom.job_applicant_acknowledgment,可自定义邮件内容
  • 触发方式可按需选择:
    • 给hr.applicant的stage_id字段添加onchange触发,当求职者阶段变更为第一阶段时自动调用方法发信
    • 新增定时任务,每日批量扫描所有处于第一阶段且未发信的求职者,统一调用方法发送邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:48:02