首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python解析操作服务器的电子邮件

使用python解析操作服务器的电子邮件
EN

Stack Overflow用户
提问于 2013-07-24 15:14:46
回答 1查看 2K关注 0票数 3

我在论坛上找到了这个python代码,以回答与我的问题相关的问题。我不太懂python,所以有人能告诉我为什么这个不能用吗?

(一些背景信息:我有一个网页表单,它会自动通过电子邮件发送到openERP,然后它会自动创建一个引线。然而,当创建一个引线时,像电话和名称这样的信息不会从电子邮件中读取,并以铅的形式排序到相应的字段中。)

代码语言:javascript
复制
# You can use the following variables:
#  - self: ORM model of the record on which the action is triggered
#  - object: browse_record of the record on which the action is triggered if there is one, otherwise None
#  - pool: ORM model pool (i.e. self.pool)
#  - time: Python time module
#  - cr: database cursor
#  - uid: current user id
#  - context: current context
# If you plan to return an action, assign: action = {...}

def parse_description(description):
  '''
   there is parse function
   It is example for parsing messages like this:

   Name: John
   Phone: +100500
  '''
  fields=['Name','Phone']
  _dict={}
  description=description.lower()
  for line in description.split('\n'):
    for field in fields:
        if field in line:
            split_line=line.split(':')
            if len(split_line)>1:
                pre_dict[field]=line.split(':')[1]
  return  dict

lead=self.browse(cr,uid,context['active_id'],context=context)
description=lead['description']
_dict=parse_description(description)
self.write(cr,uid,context['active_id'],{
                        'partner_name':_dict.get('name'),
                        'contact_name':_dict.get('name'),
                        'phone':_dict.get(u'phone'),
                        'mobile':_dict.get(u'phone')})

更新:

当我取邮件时,我得到了这些回溯

代码语言:javascript
复制
2014-07-01 13:39:40,188 4992 INFO v8_demo openerp.addons.mail.mail_thread: Routing 
mail from Atul Jain <jain.atul43@gmail.com> to jain.atul10@hotmail.com with 
Message-Id <CAG=2G76_SRthL3ybGGyx2Lai5H=RMNxUOjRRR=+5-ODrcgtEZw@mail.gmail.com>:
fallback to model:crm.lead, thread_id:False, custom_values:None, uid:1
2014-07-01 13:39:40,445 4992 ERROR v8_demo openerp.addons.fetchmail.fetchmail: 
Failed to fetch mail from imap server Gmail.
Traceback (most recent call last):
File "/home/atul/openerp-8/openerp/addons/fetchmail/fetchmail.py", line 206, in 
fetch_mail
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids'
:[res_id], 'active_model': context.get("thread_model", server.object_id.model)})
File "/home/atul/openerp-8/openerp/addons/base/ir/ir_actions.py", line 967, in run
res = func(cr, uid, action, eval_context=eval_context, context=run_context)
File "/home/atul/openerp-8/openerp/addons/base/ir/ir_actions.py", line 805,  
in run_action_code_multi
eval(action.code.strip(), eval_context, mode="exec", nocopy=True)  # nocopy allows 
to return 'action'
File "/home/atul/openerp-8/openerp/tools/safe_eval.py", line 254, in safe_eval
return eval(c, globals_dict, locals_dict)
File "", line 14, in <module>
File "", line 4, in parse_description
ValueError: "'bool' object has no attribute 'lower'" while evaluating
u"def parse_description(description):
fields=['name','phone']
_dict={}
description=description.lower()
for line in description.split('\\n'):
for field in fields: 
if field in line:
split_line=line.split(':')
if len(split_line)>1:
_dict[field]=split_line[1]
return _dict
lead=self.browse(cr,uid,context['active_id'],context=context)\ndescription=lead['description']
_dict=parse_description(description)

 self.write(cr,uid,context['active_id'],{                'partner_name':_dict.get('name'),                             'contact_name':_dict.get('name'),        
'phone':_dict.get(u'phone'),
'mobile':_dict.get(u'phone')})"

请帮助我理解这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 16:10:52

我已经修复了parse_description函数:

代码语言:javascript
复制
def parse_description(description):
  '''
   there is parse function
   It is example for parsing messages like this:

   Name: John
   Phone: +100500
  '''
  fields=['name','phone']
  _dict={}
  description=description.lower()
  for line in description.split('\n'):
    for field in fields:
        if field in line:
            split_line=line.split(':')
            if len(split_line)>1:
                _dict[field]=split_line[1]
  return _dict
  1. 我将fields值更改为小写,因为描述上的所有操作都在description.lower()上。
  2. pre_dict[field]=line.split(':')[1]行上,您正在拆分行以获得结果。这已经完成了:split_line=line.split(':'),所以您可以将pre_dict行替换为pre_dict[field]=split_line[1]
  3. 在同一行中,您使用的变量是pre_dict,它以前从未被引用过。我想您是想使用_dict,所以行应该是_dict[field]=split_line[1]
  4. 函数返回dict,它是一种类型,而不是变量。您可能希望它返回包含字段数据的字典,因此它应该返回_dict;否则总是会得到结果<type 'dict'>

至于剩下的代码,没有足够的上下文让我理解发生了什么或哪里出了问题。至少parse_description函数现在应该可以工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17838142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档