在Odoo中从电子邮件中提取内容

时间:2016-02-19 10:11:32

标签: python email openerp odoo-8

我尽量让你的问题尽可能清楚。 我在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), }

传入电子邮件正文的示例:

  

用户ID:1234
  用户名:Nicolas Mustermann
  编程技巧:Java,C ++,Python
  国家:德国
  等

  一切正常,但我想要那个,例如&#39;名称&#39;从电子邮件正文中获取其价值(Nicolas Mustermann)。   我如何更改该行:&#39; partner_name&#39;:val,以实现该目标?

祝你好运

1 个答案:

答案 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;然而,这样做的方式。我觉得这种方法很笨重。