先说结论
Odoo 招聘模块里的“岗位邮箱收简历”并不是一个简单的邮件网关。
看 /home/ubuntu/odoo-temp/addons/hr_recruitment/models/hr_applicant.py,你会发现官方真正做的是一条邮件到候选人对象的整理链路:
- 岗位可以有自己的 alias / reply-to
- 不同招聘平台来信可以按规则解析
- 联系人不一定立刻建完整 partner
- Applicant 和后续 Employee 的连接也被刻意延后
所以它要解决的不是:
- 收到一封邮件,生成一条记录
而是:
如何把来源复杂、格式混乱的招聘邮件,整理成后续还能持续运营的 applicant。
第一层:岗位邮箱不是共享收件箱,而是岗位级入口
get_empty_list_help() 会直接展示 hr_job.alias_email,这已经说明官方默认心智不是“公司 HR 一个总邮箱”。
它更像:
- 每个岗位有自己的投递入口
- 候选人邮件可以直接落到这个岗位
- 后续回复地址也优先跟着岗位走
再看 _notify_get_reply_to(),Applicant 的 reply-to 会优先取 job_id 对应的 alias。
这意味着岗位邮箱不是 UI 装饰,而是整个招聘沟通链路的锚点。
第二层:message_new() 不是盲收,它会先判断来源是不是招聘平台
真正有意思的是 message_new()。
正常来信时,Odoo 会:
- 从
from里解析partner_name - 把
email_from存下来 - 尝试挂到
partner_id
但如果发件人命中了 hr.job.platform,逻辑就变了:
- 不再简单信任发件人展示名
- 会用平台配置的
regex去抓subject和body - 从中提取真正想要的候选人名字
这一步非常实用,因为招聘平台邮件经常长这样:
- 发件人是平台机器人
- 标题里才有候选人名
- 正文里夹杂模板噪音
如果没有这层平台解析,系统里很容易堆满“LinkedIn Notification”之类的假名字。
第三层:Applicant 与 Partner 是渐进式绑定,不是强制同步
很多系统会在导入候选人的第一刻就强制建联系人。
Odoo 这里明显更克制。
从字段定义和 _inverse_partner_email() / _message_post_after_hook() 可以看出:
- 没必要时,Applicant 可以先只有
partner_name/email_from - 真正需要时,再去找或创建
partner_id - 后续发消息、推荐收件人时,还能回填 partner
这代表官方把 Applicant 当成一个先运营、后归档到主数据的对象,而不是一开始就硬塞进联系人体系。
对招聘场景来说,这很合理,因为简历线索的脏数据比例本来就高。
第四层:为什么系统要同时保留 applicant、partner、employee 三层
create_employee_from_applicant() 进一步说明,Applicant 并不是 Employee 的简化版。
官方刻意保留三层:
hr.applicant:招聘阶段对象res.partner:联系方式和沟通承载hr.employee:正式人事对象
只有到了真正录用时,才用 _get_employee_create_vals() 把:
- 姓名
- 联系方式
- 地址
- 申请关联
带进员工对象。
这背后非常重要的一点是:
招聘线索和正式员工不是同一生命周期。
如果一有简历就建员工,后面数据会非常脏。
第五层:平台邮件解析的价值,不只是建档成功率更高
很多人以为 regex 解析只是为了“候选人姓名更好看”。
其实它更大的价值在于后续运营质量:
- 去重时不容易被平台机器人名干扰
- 人才池复用时更容易识别真实候选人
- 沟通邮件和附件能更稳定落到正确 applicant
也就是说,平台来信解析不是 cosmetic 优化,而是在降低整个招聘主数据链条的噪声。
第六层:邮件入口其实决定了招聘流程是否可持续
如果岗位 alias、平台 regex、联系人渐进绑定这些环节都没配好,常见结果会是:
- 候选人名混乱
- 一个候选人建出多条脏记录
- 回复从错误邮箱发出
- 后续转员工时资料不完整
所以招聘邮箱并不是“导入功能”,而是招聘流程最前面的主数据整理器。
实施时最容易踩的 4 个坑
1. 所有岗位共用一个邮箱入口
这样岗位归属和回复链路都容易混乱。
2. 忽略招聘平台来信格式差异
不做 regex 解析,姓名和来源很快会脏掉。
3. 一上来就强制创建完整联系人/员工
招聘线索的数据质量通常撑不起这么重的建模。
4. 把 alias 当收件配置,不当业务入口
其实 reply-to、岗位归属和后续沟通都围绕它转。
最后一句话
Odoo 的招聘邮件链路,本质上不是“收简历入库”,而是把混乱邮件来源整理成可持续运营的 applicant 对象。
DISCUSSION
评论区