[MERGE] fetchmail: useability improvement
bzr revid: hmo@tinyerp.com-20101104121923-7snmlopwoo5yb89h
This commit is contained in:
commit
1e437aa889
|
@ -42,7 +42,7 @@ class email_server(osv.osv):
|
|||
'active':fields.boolean('Active', required=False),
|
||||
'state':fields.selection([
|
||||
('draft', 'Not Confirmed'),
|
||||
('wating', 'Waiting for Verification'),
|
||||
('waiting', 'Waiting for Verification'),
|
||||
('done', 'Confirmed'),
|
||||
], 'State', select=True, readonly=True),
|
||||
'server' : fields.char('Server', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}),
|
||||
|
@ -97,20 +97,8 @@ class email_server(osv.osv):
|
|||
def set_draft(self, cr, uid, ids, context={}):
|
||||
self.write(cr, uid, ids , {'state':'draft'})
|
||||
return True
|
||||
|
||||
def button_fetch_mail(self, cr, uid, ids, context={}):
|
||||
self.fetch_mail(cr, uid, ids)
|
||||
return True
|
||||
|
||||
def _fetch_mails(self, cr, uid, ids=False, context={}):
|
||||
if not ids:
|
||||
ids = self.search(cr, uid, [])
|
||||
return self.fetch_mail(cr, uid, ids, context)
|
||||
|
||||
def fetch_mail(self, cr, uid, ids, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
email_tool = self.pool.get('email.server.tools')
|
||||
|
||||
def button_confirm_login(self, cr, uid, ids, context={}):
|
||||
for server in self.browse(cr, uid, ids, context):
|
||||
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
|
||||
context.update({'server_id': server.id, 'server_type': server.type})
|
||||
|
@ -124,21 +112,8 @@ class email_server(osv.osv):
|
|||
imap_server = IMAP4(server.server, int(server.port))
|
||||
|
||||
imap_server.login(server.user, server.password)
|
||||
imap_server.select()
|
||||
result, data = imap_server.search(None, '(UNSEEN)')
|
||||
for num in data[0].split():
|
||||
result, data = imap_server.fetch(num, '(RFC822)')
|
||||
res_id = email_tool.process_email(cr, uid, server.object_id.model, data[0][1], attach=server.attach, context=context)
|
||||
if res_id and server.action_id:
|
||||
action_pool = self.pool.get('ir.actions.server')
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
|
||||
|
||||
imap_server.store(num, '+FLAGS', '\\Seen')
|
||||
count += 1
|
||||
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch/process %s email(s) from %s' % (count, server.name))
|
||||
|
||||
imap_server.close()
|
||||
imap_server.logout()
|
||||
ret_server = imap_server
|
||||
|
||||
elif server.type == 'pop':
|
||||
pop_server = None
|
||||
if server.is_ssl:
|
||||
|
@ -150,15 +125,56 @@ class email_server(osv.osv):
|
|||
#pop_server.user("recent:"+server.user)
|
||||
pop_server.user(server.user)
|
||||
pop_server.pass_(server.password)
|
||||
pop_server.list()
|
||||
ret_server = pop_server
|
||||
|
||||
self.write(cr, uid, [server.id], {'state':'done'})
|
||||
if context.get('get_server',False):
|
||||
return ret_server
|
||||
except Exception, e:
|
||||
logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (e))
|
||||
return True
|
||||
|
||||
def button_fetch_mail(self, cr, uid, ids, context={}):
|
||||
self.fetch_mail(cr, uid, ids, context=context)
|
||||
return True
|
||||
|
||||
def _fetch_mails(self, cr, uid, ids=False, context={}):
|
||||
if not ids:
|
||||
ids = self.search(cr, uid, [])
|
||||
return self.fetch_mail(cr, uid, ids, context=context)
|
||||
|
||||
def fetch_mail(self, cr, uid, ids, context={}):
|
||||
email_tool = self.pool.get('email.server.tools')
|
||||
action_pool = self.pool.get('ir.actions.server')
|
||||
context.update({'get_server': True})
|
||||
for server in self.browse(cr, uid, ids, context):
|
||||
count = 0
|
||||
try:
|
||||
if server.type == 'imap':
|
||||
imap_server = self.button_confirm_login(cr, uid, [server.id], context=context)
|
||||
imap_server.select()
|
||||
result, data = imap_server.search(None, '(UNSEEN)')
|
||||
for num in data[0].split():
|
||||
result, data = imap_server.fetch(num, '(RFC822)')
|
||||
res_id = email_tool.process_email(cr, uid, server.object_id.model, data[0][1], attach=server.attach, context=context)
|
||||
if res_id and server.action_id:
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
|
||||
|
||||
imap_server.store(num, '+FLAGS', '\\Seen')
|
||||
count += 1
|
||||
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch/process %s email(s) from %s' % (count, server.name))
|
||||
|
||||
imap_server.close()
|
||||
imap_server.logout()
|
||||
elif server.type == 'pop':
|
||||
pop_server = self.button_confirm_login(cr, uid, [server.id], context=context)
|
||||
pop_server.list()
|
||||
(numMsgs, totalSize) = pop_server.stat()
|
||||
for num in range(1, numMsgs + 1):
|
||||
(header, msges, octets) = pop_server.retr(num)
|
||||
msg = '\n'.join(msges)
|
||||
res_id = email_tool.process_email(cr, uid, server.object_id.model, msg, attach=server.attach, context=context)
|
||||
if res_id and server.action_id:
|
||||
action_pool = self.pool.get('ir.actions.server')
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
|
||||
|
||||
pop_server.dele(num)
|
||||
|
@ -167,7 +183,6 @@ class email_server(osv.osv):
|
|||
|
||||
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
|
||||
|
||||
self.write(cr, uid, [server.id], {'state':'done'})
|
||||
except Exception, e:
|
||||
logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (e))
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="blue:state in ('draft');black:state in ('wating');gray:state in('done')" string="POP/IMAP Servers">
|
||||
<field name="name" select="1"/>
|
||||
<field name="type" select="1"/>
|
||||
<field name="user" select="1"/>
|
||||
<field name="is_ssl" select="1"/>
|
||||
<field name="state" select="1"/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="user"/>
|
||||
<field name="is_ssl"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -58,63 +58,65 @@
|
|||
</notebook>
|
||||
<group col="6" colspan="4">
|
||||
<field name="state" select="1"/>
|
||||
<button string="Fetch Emails" type="object" name="button_fetch_mail"/>
|
||||
<button string="Confirm" type="object" name="button_confirm_login" states="draft"/>
|
||||
<button string="Fetch Emails" type="object" name="button_fetch_mail" states="done"/>
|
||||
<button string="Set to Draft" type="object" name="set_draft"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_email_server_search">
|
||||
<field name="name">email.server.search</field>
|
||||
<field name="model">email.server</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Email Servers">
|
||||
<filter string="IMAP" icon="terp-folder-green" domain="[('type','=','imap')]" help="Server type IMAP."/>
|
||||
<filter string="POP" icon="terp-folder-orange" domain="[('type','=','pop')]" help="Server type POP."/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="SSL" icon="terp-camera_test" domain="[('is_ssl','=',True)]" help="If SSL required."/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="object_id"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." groups="base.group_extended">
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_email_server_tree">
|
||||
<field name="name">POP Servers</field>
|
||||
<field name="name">Email Servers</field>
|
||||
<field name="res_model">email.server</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_email_server_tree"/>
|
||||
<field name="context">{'type':'pop'}</field>
|
||||
<field name="domain">[('type','=','pop')]</field>
|
||||
<field name="search_view_id" ref="view_email_server_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
parent="base.menu_config"
|
||||
id="menu_action_fetchmail_server_tree"
|
||||
name="Fetchmail Services"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
parent="menu_action_fetchmail_server_tree"
|
||||
id="menu_action_email_server_tree"
|
||||
action="action_email_server_tree"
|
||||
/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_email_server_tree_imap">
|
||||
<field name="name">IMAP Servers</field>
|
||||
<field name="res_model">email.server</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_email_server_tree"/>
|
||||
<field name="context">{'type':'imap'}</field>
|
||||
<field name="domain">[('type','=','imap')]</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
parent="menu_action_fetchmail_server_tree"
|
||||
id="menu_action_email_server_tree_imap"
|
||||
action="action_email_server_tree_imap"
|
||||
parent="base.menu_mail_gateway"
|
||||
id="menu_action_fetchmail_server_tree"
|
||||
action="action_email_server_tree"
|
||||
name="Email Servers"
|
||||
/>
|
||||
|
||||
<record model="ir.ui.view" id="mailgate_message_tree_view">
|
||||
<field name="name">mailgate.message.tree</field>
|
||||
<field name="model">mailgate.message</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="server_id" select="1"/>
|
||||
<field name="ref_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
<field name="name">mailgate.message.tree</field>
|
||||
<field name="model">mailgate.message</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="server_id" select="1"/>
|
||||
<field name="ref_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'server_id': active_id}"
|
||||
|
@ -122,33 +124,5 @@
|
|||
id="act_server_history" name="Email History"
|
||||
res_model="mailgate.message" src_model="email.server"/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_mailgate_message_tree">
|
||||
<field name="name">Received Email History</field>
|
||||
<field name="res_model">mailgate.message</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="mailgate_message_tree_view"/>
|
||||
<field name="context">{'server_type':'imap'}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
parent="menu_action_email_server_tree_imap"
|
||||
id="menu_action_mailgate_message_tree"
|
||||
action="action_mailgate_message_tree"/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_mailgate_message_tree_pop">
|
||||
<field name="name">Received Email History</field>
|
||||
<field name="res_model">mailgate.message</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="mailgate_message_tree_view"/>
|
||||
<field name="context">{'server_type':'pop'}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
parent="menu_action_email_server_tree"
|
||||
id="menu_action_mailgate_message_tree_pop"
|
||||
action="action_mailgate_message_tree_pop"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
Loading…
Reference in New Issue