From da3ee80c6bf9f823166d04fdb843c66fa12803b7 Mon Sep 17 00:00:00 2001 From: "ksa (Open ERP)" Date: Wed, 11 Aug 2010 19:37:26 +0530 Subject: [PATCH] [IMP]: solve problem for mail getway bzr revid: ksa@tinyerp.co.in-20100811140726-ky86i3z0x9s4io80 --- addons/mail_gateway/mail_gateway.py | 11 +- addons/thunderbird/__openerp__.py | 11 +- addons/thunderbird/partner/partner.py | 155 ++++++++++++---- .../plugin/chrome/openerp_plugin.jar | Bin 65927 -> 66029 bytes .../chrome/openerp_plugin/content/address.xul | 6 +- .../chrome/openerp_plugin/content/plugin.xul | 2 +- .../openerp_plugin/content/tiny_xmlrpc.js | 173 ++++++++---------- addons/thunderbird/plugin/openerp_plugin.xpi | Bin 141105 -> 141310 bytes .../openerp_plugin/chrome/openerp_plugin.jar | Bin 65927 -> 66029 bytes .../chrome/openerp_plugin/content/address.xul | 6 +- .../chrome/openerp_plugin/content/plugin.xul | 2 +- .../openerp_plugin/content/tiny_xmlrpc.js | 173 ++++++++---------- 12 files changed, 294 insertions(+), 245 deletions(-) diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py index c2e1da843ca..3cb2019e85a 100644 --- a/addons/mail_gateway/mail_gateway.py +++ b/addons/mail_gateway/mail_gateway.py @@ -112,7 +112,7 @@ class mailgate_thread(osv.osv): if history: for att in attach: attachments.append(att_obj.create(cr, uid, {'name': att[0], 'datas': base64.encodestring(att[1])})) - + for param in (email, email_cc, email_bcc): if isinstance(param, list): param = ", ".join(param) @@ -141,7 +141,7 @@ class mailgate_thread(osv.osv): mailgate_thread() def format_date_tz(date, tz=None): - if not date: + if not date: return 'n/a' format = tools.DEFAULT_SERVER_DATETIME_FORMAT return tools.server_to_local_timestamp(date, format, format, tz) @@ -191,7 +191,7 @@ class mailgate_message(osv.osv): 'description': fields.text('Description', readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner', required=False), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments', readonly=True), - 'display_text': fields.function(_get_display_text, method=True, type='text', size="512", string='Display Text'), + 'display_text': fields.function(_get_display_text, method=True, type='text', size="512", string='Display Text'), } def init(self, cr): @@ -224,7 +224,7 @@ class mailgate_tool(osv.osv_memory): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param model: OpenObject Model - @param res_ids: Ids of the record of OpenObject model created + @param res_ids: Ids of the record of OpenObject model created @param msg: Email details @param attach: Email attachments """ @@ -241,7 +241,7 @@ class mailgate_tool(osv.osv_memory): 'res_model': model, 'email_cc': msg.get('cc'), 'email_from': msg.get('from'), - 'email_to': msg.get('to'), + 'email_to': msg.get('to'), 'message_id': msg.get('message-id'), 'references': msg.get('references') or msg.get('in-reply-to'), 'res_id': res_id, @@ -283,6 +283,7 @@ class mailgate_tool(osv.osv_memory): tools.misc._email_send(smtp_from, self.to_email(email_error), msg, openobject_id=res.id) def process_email(self, cr, uid, model, message, attach=True, context=None): + print "processssss_emaillllllllll",model """This function Processes email and create record for given OpenERP model @param self: The object pointer @param cr: the current row, from the database cursor, diff --git a/addons/thunderbird/__openerp__.py b/addons/thunderbird/__openerp__.py index 703aec6ad67..ed16b4909a9 100644 --- a/addons/thunderbird/__openerp__.py +++ b/addons/thunderbird/__openerp__.py @@ -22,11 +22,11 @@ { "name" : "Thunderbird Interface", "version" : "1.0", - "author" : "Axelor", - "website" : "http://www.axelor.com/", - "depends" : ["base"], + "author" : "OpenERP SA & Axelor", + "website" : "http://www.openerp.com/", + "depends" : ["base","mail_gateway"], "category" : "Generic Modules/Thunderbird interface", - "description": ''' + "description": """ This module is required for the thuderbird plug-in to work properly. @@ -35,8 +35,7 @@ a project, an analytical account, or any other object and attach selected mail as .eml file in attachment of selected record. - You can create new case in crm using Create Case button. - Select a section for which you want to create case.''', + """, "init_xml" : [], "demo_xml" : [], "update_xml" : ['thunderbird_installer.xml', diff --git a/addons/thunderbird/partner/partner.py b/addons/thunderbird/partner/partner.py index 9d351841f55..4e5baf25904 100644 --- a/addons/thunderbird/partner/partner.py +++ b/addons/thunderbird/partner/partner.py @@ -25,27 +25,117 @@ from osv import osv,fields import base64 import netsvc from tools.translate import _ +import email +import tools +import binascii +class email_server_tools(osv.osv_memory): + _inherit = "email.server.tools" + def history_message(self, cr, uid, model, res_id, message): + #@param message: string of mail which is read from EML File + attachment_pool = self.pool.get('ir.attachment') + msg = self.parse_message(message) + attachments = msg.get('attachments', []) + att_ids = [] + for attachment in attachments: + data_attach = { + 'name': attachment, + 'datas': binascii.b2a_base64(str(attachments.get(attachment))), + 'datas_fname': attachment, + 'description': 'Mail attachment From Thunderbird msg_id: %s' %(msg.get('message_id', '')), + 'res_model': model, + 'res_id': res_id, + } + att_ids.append(attachment_pool.create(cr, uid, data_attach)) + return self.history(cr, uid, model, res_id, msg, att_ids) + + def parse_message(self, message): + #TOCHECK: put this function in mailgateway + msg_txt = email.message_from_string(message) + message_id = msg_txt.get('message-id', False) + msg = {} + msg_txt = email.message_from_string(message) + fields = msg_txt.keys() + msg['id'] = message_id + msg['message-id'] = message_id + + if 'Subject' in fields: + msg['subject'] = self._decode_header(msg_txt.get('Subject')) + + if 'Content-Type' in fields: + msg['content-type'] = msg_txt.get('Content-Type') + + if 'From' in fields: + msg['from'] = self._decode_header(msg_txt.get('From')) + + if 'Delivered-To' in fields: + msg['to'] = self._decode_header(msg_txt.get('Delivered-To')) + + if 'CC' in fields: + msg['cc'] = self._decode_header(msg_txt.get('CC')) + + if 'Reply-to' in fields: + msg['reply'] = self._decode_header(msg_txt.get('Reply-To')) + + if 'Date' in fields: + msg['date'] = self._decode_header(msg_txt.get('Date')) + + if 'Content-Transfer-Encoding' in fields: + msg['encoding'] = msg_txt.get('Content-Transfer-Encoding') + + if 'References' in fields: + msg['references'] = msg_txt.get('References') + + if 'In-Reply-To' in fields: + msg['in-reply-to'] = msg_txt.get('In-Reply-To') + + if 'X-Priority' in fields: + msg['priority'] = msg_txt.get('X-Priority', '3 (Normal)').split(' ')[0] + + if not msg_txt.is_multipart() or 'text/plain' in msg.get('Content-Type', ''): + encoding = msg_txt.get_content_charset() + body = msg_txt.get_payload(decode=True) + msg['body'] = tools.ustr(body, encoding) + + attachments = {} + has_plain_text = False + if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', ''): + body = "" + for part in msg_txt.walk(): + if part.get_content_maintype() == 'multipart': + continue + + encoding = part.get_content_charset() + filename = part.get_filename() + if part.get_content_maintype()=='text': + content = part.get_payload(decode=True) + if filename: + attachments[filename] = content + elif not has_plain_text: + # main content parts should have 'text' maintype + # and no filename. we ignore the html part if + # there is already a plaintext part without filename, + # because presumably these are alternatives. + content = tools.ustr(content, encoding) + if part.get_content_subtype() == 'html': + body = tools.ustr(tools.html2plaintext(content)) + elif part.get_content_subtype() == 'plain': + body = content + has_plain_text = True + elif part.get_content_maintype() in ('application', 'image'): + if filename : + attachments[filename] = part.get_payload(decode=True) + else: + res = part.get_payload(decode=True) + body += tools.ustr(res, encoding) + + msg['body'] = body + msg['attachments'] = attachments + return msg +email_server_tools() class thunderbird_partner(osv.osv_memory): _name = "thunderbird.partner" _description="Thunderbid mails" - _rec_name="sender" - - def mailcreate(self,cr,user,vals): - dictcreate = dict(vals) - import email - header_name = email.Header.decode_header(dictcreate['name']) - dictcreate['name'] = header_name and header_name[0] and header_name[0][0] - address_obj = self.pool.get('res.partner.address') - case_pool = self.pool.get(dictcreate.get('object','crm.lead')) - partner_ids = address_obj.search(cr,user,[('email','=',dictcreate['email_from'])]) - partner = address_obj.read(cr,user,partner_ids,['partner_id','name']) - if partner and partner[0] and partner[0]['partner_id']: - dictcreate.update({'partner_id':partner[0]['partner_id'][0],'partner_name':partner[0]['name']}) - create_id = case_pool.create(cr, user, dictcreate) - cases = case_pool.browse(cr,user,[create_id]) - case_pool._history(cr, user, cases, _('Archive'), history=True, email=False) - return create_id def create_contact(self,cr,user,vals): dictcreate = dict(vals) @@ -54,6 +144,21 @@ class thunderbird_partner(osv.osv_memory): create_id = self.pool.get('res.partner.address').create(cr, user, dictcreate) return create_id + def history_message(self,cr,uid,vals): + dictcreate = dict(vals) + server_tools_pool = self.pool.get('email.server.tools') + res_id = int(dictcreate.get('res_id')) + model = str(dictcreate.get('model')) + message = str(dictcreate.get('message')) + server_tools_pool.history_message(cr,uid,model,res_id,message) + return True + + def process_email(self,cr,uid,vals): + dictcreate = dict(vals) + model = str(dictcreate.get('model')) + message = str(dictcreate.get('message')) + return self.pool.get('email.server.tools').process_email(cr, uid, model, message, attach=True, context=None) + def search_contact(self, cr, user, vals): address_obj = self.pool.get('res.partner.address') partner = address_obj.search(cr, user,[('email','=',vals)]) @@ -161,21 +266,7 @@ class thunderbird_partner(osv.osv_memory): name_get.append(er_val) return name_get - def create_attachment(self,cr,user,vals): - dictcreate = dict(vals) - datas = [dictcreate['datas']] - name = [dictcreate['name']] - f_name = [dictcreate['datas_fname']] - if(dictcreate['datas'].__contains__(',')): - name = dictcreate['name'].split(',') - datas = dictcreate['datas'].split(',') - f_name = dictcreate['datas_fname'].split(',') - for i in range(0,datas.__len__()): - dictcreate['name'] = name[i] - dictcreate['datas'] = datas[i] - dictcreate['datas_fname'] = f_name[i] - create_id = self.pool.get('ir.attachment').create(cr,user,dictcreate) - return 0 + def list_alldocument(self,cr,user,vals): obj_list= [('crm.lead','Lead'),('project.issue','Project Issue'), ('hr.applicant','HR Recruitment')] diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin.jar b/addons/thunderbird/plugin/chrome/openerp_plugin.jar index ac560f93909959c7c82cfcfcfe353fd479d5bbb8..b5ce0747bcd6680bc2ced94287dad2db06342ffa 100644 GIT binary patch delta 15539 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 diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul index 407821ef4db..2d6f0e2dec1 100644 --- a/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul +++ b/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul @@ -17,13 +17,14 @@