From c88bd5919209b4a369bb2b073fdf80b4662fe9ea Mon Sep 17 00:00:00 2001 From: Mantavya Gajjar Date: Thu, 22 Apr 2010 18:17:54 +0530 Subject: [PATCH] [IMP]: improvement in email functionalaities attachment creation process separate from fetctmail bzr revid: mga@tinyerp.com-20100422124754-yy23up36j5171gh1 --- addons/crm/crm_mailgate.py | 13 ++++ addons/fetchmail/fetchmail.py | 118 +++++++++++++++++----------------- 2 files changed, 72 insertions(+), 59 deletions(-) diff --git a/addons/crm/crm_mailgate.py b/addons/crm/crm_mailgate.py index 65ca7626468..001cf2aaa73 100644 --- a/addons/crm/crm_mailgate.py +++ b/addons/crm/crm_mailgate.py @@ -72,6 +72,19 @@ class crm_cases(osv.osv): res = self.create(cr, uid, vals, context) cases = self.browse(cr, uid, [res]) self._history(cr, uid, cases, _('Receive'), history=True, details=body, email_from=msg_from, message_id=msg.get('id')) + + attachents = msg.get('attachments', []) + for attactment in attachents or []: + data_attach = { + 'name': attactment, + 'datas':binascii.b2a_base64(str(attachents.get(attactment))), + 'datas_fname': attactment, + 'description': 'Mail attachment', + 'res_model': self._name, + 'res_id': res, + } + self.pool.get('ir.attachment').create(cr, uid, data_attach) + return res def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context={}): diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index 565c4434607..a38bd34dad0 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -176,6 +176,9 @@ class mail_server(osv.osv): return {'value':{'port':port}} def _process_email(self, cr, uid, server, message, context={}): + context.update({ + 'server_id':server.id + }) history_pool = self.pool.get('mail.server.history') msg_txt = email.message_from_string(message) message_id = msg_txt.get('Message-ID', False) @@ -289,16 +292,16 @@ class mail_server(osv.osv): logger.notifyChannel('imap', netsvc.LOG_WARNING, 'method def message_new is not define in model %s' % (model_pool._name)) return False - for attactment in attachents or []: - data_attach = { - 'name': attactment, - 'datas':binascii.b2a_base64(str(attachents.get(attactment))), - 'datas_fname': attactment, - 'description': 'Mail attachment', - 'res_model': server.object_id.model, - 'res_id': res_id, - } - self.pool.get('ir.attachment').create(cr, uid, data_attach) +# for attactment in attachents or []: +# data_attach = { +# 'name': attactment, +# 'datas':binascii.b2a_base64(str(attachents.get(attactment))), +# 'datas_fname': attactment, +# 'description': 'Mail attachment', +# 'res_model': server.object_id.model, +# 'res_id': res_id, +# } +# self.pool.get('ir.attachment').create(cr, uid, data_attach) if server.action_id: action_pool = self.pool.get('ir.actions.server') @@ -329,53 +332,53 @@ class mail_server(osv.osv): 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)) - 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() + 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() - (numMsgs, totalSize) = pop_server.stat() - count = 0 - 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 @@ -404,10 +407,7 @@ class mail_server_history(osv.osv): mail_server_history() class fetchmail_tool(osv.osv): - """ - OpenERP Model : fetchmail_tool - """ - + _name = 'email.server.tools' _description = "Email Tools" _auto = False