【问题标题】:Extracting content out of Email within Odoo在 Odoo 中从电子邮件中提取内容
【发布时间】:2016-02-19 10:11:32
【问题描述】:

我尽量让你清楚我的问题。 我已经在 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
用户名:尼古拉斯·穆斯特曼
编程技能:Java、C++、Python
国家: 德国
等等

一切正常,但我想要那个,例如'name' 从电子邮件正文中获取其值(Nicolas Mustermann)。 我如何更改行:'partner_name': val,以实现这一目标?

最好的问候

【问题讨论】:

  • 哦,你说得对……我在帖子里改了,谢谢
  • 我不明白你换行是什么意思。一旦你有了包含人名的“val”变量,你到底想用这些数据做什么?

标签: python email openerp odoo-8


【解决方案1】:

我假设电子邮件正文位于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”的方式来执行此操作。感觉这个方法很笨重。

【讨论】:

  • 你是对的,名称是通过电子邮件地址定义的......但我需要从电子邮件正文中读出它。问题是,我自己将电子邮件发送到接收电子邮件服务器以创建新申请人。但是如果我这样做,申请人会以我的名字命名,因为它是用我的电子邮件地址定义的......为了自动获得正确的名字,我必须使用电子邮件正文中的信息 --- 我不能使用命令。 getline 或类似的东西?所以直接导航到名字的第二行?
  • 谢谢,我会试试 =) 我会知道它是否有效
猜你喜欢
  • 2021-11-08
  • 2015-07-19
  • 1970-01-01
  • 2021-12-23
  • 2013-04-05
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多