[FIX]: add record reuls for fetchmail servers

[IMP]: add unique index, on email to document configuration, so same server can not be configured for multiple folders

bzr revid: mga@tinyerp.com-20100422134447-3hh4wd7ey89pfczr
This commit is contained in:
Mantavya Gajjar 2010-04-22 19:14:47 +05:30
parent 84a0a39d23
commit b98126cb41
2 changed files with 62 additions and 46 deletions

View File

@ -117,7 +117,7 @@ def html2plaintext(html, body_id=None, encoding='utf-8'):
html += '[%s] %s\n' % (i+1, url)
return html
class mail_server(osv.osv):
class email_server(osv.osv):
_name = 'email.server'
_description = "POP/IMAP Server"
@ -334,56 +334,56 @@ class mail_server(osv.osv):
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
count = 0
# try:
if server.type == 'imap':
imap_server = None
if server.is_ssl:
imap_server = IMAP4_SSL(server.server, int(server.port))
else:
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)')
if self._process_email(cr, uid, server, data[0][1], context):
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 = None
if server.is_ssl:
pop_server = POP3_SSL(server.server, int(server.port))
else:
pop_server = POP3(server.server, int(server.port))
#TODO: use this to remove only unread messages
#pop_server.user("recent:"+server.user)
pop_server.user(server.user)
pop_server.pass_(server.password)
pop_server.list()
try:
if server.type == 'imap':
imap_server = None
if server.is_ssl:
imap_server = IMAP4_SSL(server.server, int(server.port))
else:
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)')
if self._process_email(cr, uid, server, data[0][1], context):
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 = None
if server.is_ssl:
pop_server = POP3_SSL(server.server, int(server.port))
else:
pop_server = POP3(server.server, int(server.port))
#TODO: use this to remove only unread messages
#pop_server.user("recent:"+server.user)
pop_server.user(server.user)
pop_server.pass_(server.password)
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)
self._process_email(cr, uid, server, msg, context)
pop_server.dele(num)
(numMsgs, totalSize) = pop_server.stat()
for num in range(1, numMsgs + 1):
(header, msges, octets) = pop_server.retr(num)
msg = '\n'.join(msges)
self._process_email(cr, uid, server, msg, context)
pop_server.dele(num)
pop_server.quit()
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
# except Exception, e:
# logger.notifyChannel('IMAP', netsvc.LOG_WARNING, '%s' % (e))
pop_server.quit()
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
except Exception, e:
logger.notifyChannel('IMAP', netsvc.LOG_WARNING, '%s' % (e))
return True
mail_server()
email_server()
class mail_server_history(osv.osv):

View File

@ -12,4 +12,20 @@
<field eval="'()'" name="args"/>
</record>
</data>
<data>
<record id="fetchmail_user_server" model="ir.rule.group">
<field name="name">User wise Server</field>
<field ref="model_email_server" name="model_id" model="ir.model"/>
<field eval="True" name="global"/>
</record>
<record id="fetchmail_user_server_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','email.server'),('name','=','user_id')]"/>
<field name="operator">=</field>
<field name="operand">user.id</field>
<field name="rule_group" ref="fetchmail_user_server"/>
</record>
</data>
</openerp>