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

Odoo 14如何实现求职者提交申请后自动发送确认邮件

Odoo 14 招聘申请自动发送确认邮件实现方案

你原有代码存在几处逻辑错误,修正后即可实现需求:

  • 原有方法中循环self不符合cron调用逻辑,cron执行model.job_app_acknowledgments()时self是空的hr.applicant记录集,原有赋值rec.partner_id的逻辑完全不成立
  • 代码中job变量未定义,搜索条件里的job.id会直接触发报错
  • 没有增加邮件发送标记,会导致每次cron执行都给所有处于第一阶段的求职者重复发邮件
  • 无需手动设置partner_id,hr.applicant本身自带关联的联系人/邮箱字段

第一步:新增邮件发送标记字段(避免重复发信)

在你的自定义模块的models文件中继承hr.applicant新增标记字段:

from odoo import models, fields

class HrApplicant(models.Model):
    _inherit = 'hr.applicant'
    
    acknowledgment_sent = fields.Boolean(string='确认邮件已发送', default=False)

第二步:修改定时任务执行方法

替换原有方法为以下逻辑:

def job_app_acknowledgments(self):
    # 拉取所有招聘岗位的首个阶段ID
    first_stage_ids = self.env['hr.job'].search([]).mapped(lambda job: job._get_first_stage().id)
    # 筛选符合条件的未发信申请人:处于首个阶段、未发过确认信、有预留邮箱
    applicants = self.search([
        ('stage_id', 'in', first_stage_ids),
        ('acknowledgment_sent', '=', False),
        ('email_from', '!=', False)
    ])
    # 加载预设的邮件模板
    template = self.env.ref('hr_recruitment_new.job_applicant_acknowledgment')
    for app in applicants:
        # 发送邮件,Odoo会自动解析模板内的变量,无需手动传context参数
        template.send_mail(app.id, force_send=True, raise_exception=False)
        # 标记已发送,避免下次重复触发
        app.acknowledgment_sent = True

注:如果你的邮件模板还未配置收件人,直接在模板的「收件人」字段填写${object.email_from}即可,无需手动在代码里传收件人参数

第三步:Cron配置调整

你原有Cron.xml的配置无需修改,1分钟执行一次的频率刚好满足数分钟内完成推送的需求,升级模块时同步更新字段、cron配置到数据库即可生效。

如果需要更高的实时性,也可以重写hr.applicant的write方法,检测到申请阶段变更为首个阶段时直接触发发信,不需要依赖cron调度,两种方案可以根据你的场景选择。

内容的提问来源于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 19:45:05