如何在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
相关产品推荐
相关产品推荐

