Python 从Odoo内的电子邮件中提取内容

Python 从Odoo内的电子邮件中提取内容,python,email,openerp,odoo-8,Python,Email,Openerp,Odoo 8,我尽量向你说明我的问题。 我已经在Odoo中设置了一个传入电子邮件服务器。每一封收到的邮件都会为我的人力资源部招聘创建一个新的申请人 模块中此操作的默认代码如下所示: def message_new(self, cr, uid, msg, custom_values=None, context=None): """ Overrides mail_thread message_new that is called by the mailgateway through mes

我尽量向你说明我的问题。 我已经在Odoo中设置了一个传入电子邮件服务器。每一封收到的邮件都会为我的人力资源部招聘创建一个新的申请人

模块中此操作的默认代码如下所示:

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), }
def message_new(self、cr、uid、msg、custom_value=None、context=None):
“”“覆盖邮件\u线程消息\u由邮件网关调用的新邮件
通过消息处理。
此覆盖将根据电子邮件更新文档。”“”
如果自定义_值为“无”:
自定义_值={}

val=msg.get('from').split('我假设电子邮件正文在
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]
如果
msg
中不存在“用户名:”,此函数将返回None


我想有人发布一个更“pythonic”的帖子然而,这样做的方式。我觉得这个方法非常庞大。

哦,你说得对……我在帖子中更改了它,我不明白你更改行是什么意思。一旦你有了包含人名的“val”变量,你想对这些数据做什么?你是对的,名称是在电子邮件地址上定义的。…但我需要从邮件正文中读取。问题是,我自己将电子邮件发送到传入的电子邮件服务器以创建新的申请人。但是如果我这样做,申请人将以我的名字命名,因为它是用我的电子邮件地址定义的…为了自动获得正确的名称,我必须使用电子邮件正文中的信息-我不能使用那么直接导航到第二行的名称?谢谢,我会试试它=)我会告诉你它是否有效