我尽量让你的问题尽可能清楚。 我在Odoo中设置了一个传入的电子邮件服务器。每封收到的邮件都会为我的hr_recruitment创建一个新的申请人。
模块中此操作的默认代码如下所示:
def message_new(self, cr, uid, msg, custom_values=None, context=None):
""" Overrides mail_thread message_new that is called by the mailgateway
through message_process.
This override updates the document according to the email. """
if custom_values is None:
custom_values = {}
val = msg.get('from').split('<')[0]
defaults = {
'name': msg.get('subject') or _("No Subject"),
'partner_name': val,
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
'user_id': False,
'partner_id': msg.get('author_id', False), }
传入电子邮件正文的示例:
一切正常,但我想要那个,例如&#39;名称&#39;从电子邮件正文中获取其价值(Nicolas Mustermann)。 我如何更改该行:&#39; partner_name&#39;:val,以实现该目标?用户ID:1234
用户名:Nicolas Mustermann
编程技巧:Java,C ++,Python
国家:德国
等
祝你好运
答案 0 :(得分:0)
我假设电子邮件正文在msg
变量中。如果是这种情况,那么您希望获得仅包含第二行上的名称的子字符串,并将其传递给创建申请人的代码。这是一个功能,并在此过程中解决了一些极端情况:
def get_name_from_msg(msg):
prefix = 'User Name: '
name_start = msg.find(prefix)
if name_start == -1:
return None
name_start += len(prefix)
name_end = msg.find('\n', name_start)
return msg[name_start:] if name_end == -1 else msg[name_start:name_end]
如果没有&#39;用户名:&#39;此功能将返回无。在msg
。
我希望有人发布更多&#34; pythonic&#34;然而,这样做的方式。我觉得这种方法很笨重。