diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml index 2114fc9a483..8abe3cd19ee 100644 --- a/bin/addons/base/res/partner/partner_view.xml +++ b/bin/addons/base/res/partner/partner_view.xml @@ -339,7 +339,7 @@ - + diff --git a/bin/addons/base/res/partner/wizard/partner_wizard_spam.py b/bin/addons/base/res/partner/wizard/partner_wizard_spam.py index f349825d588..61ddd70aa45 100644 --- a/bin/addons/base/res/partner/wizard/partner_wizard_spam.py +++ b/bin/addons/base/res/partner/wizard/partner_wizard_spam.py @@ -22,6 +22,7 @@ import netsvc import tools from osv import fields, osv +import re class partner_wizard_spam(osv.osv_memory): """ Mass Mailing """ @@ -51,14 +52,22 @@ class partner_wizard_spam(osv.osv_memory): event_pool = self.pool.get('res.partner.event') active_ids = context and context.get('active_ids', []) partners = partner_pool.browse(cr, uid, active_ids, context) + type_ = 'plain' + if re.search('(<(pre)|[pubi].*>)', data.text): + type_ = 'html' for partner in partners: for adr in partner.address: if adr.email: name = adr.name or partner.name - to = '%s <%s>' % (name, adr.email) + to = '"%s" <%s>' % (name, adr.email) #TODO: add some tests to check for invalid email addresses #CHECKME: maybe we should use res.partner/email_send - tools.email_send(data.email_from, [to], data.subject, data.text,subtype='html') + tools.email_send(data.email_from, + [to], + data.subject, + data.text, + subtype=type_, + openobject_id="res.partner-%s"%partner.id) nbr += 1 event_pool.create(cr, uid, {'name': 'Email(s) sent through mass mailing', diff --git a/bin/addons/base/res/res_log_view.xml b/bin/addons/base/res/res_log_view.xml index 86d1e0d06cb..48dac9ca119 100644 --- a/bin/addons/base/res/res_log_view.xml +++ b/bin/addons/base/res/res_log_view.xml @@ -52,7 +52,7 @@ - Logs + Client Logs res.log form {'search_default_my': 1} diff --git a/bin/tools/misc.py b/bin/tools/misc.py index b1d77446c87..2515803f452 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -49,6 +49,10 @@ if sys.version_info[:2] < (2, 4): from threadinglocal import local else: from threading import local +try: + from html2text import html2text +except ImportError: + html2text = None import netsvc from config import config @@ -499,8 +503,7 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non email_body = ustr(body).encode('utf-8') email_text = MIMEText(email_body or '',_subtype=subtype,_charset='utf-8') - if attach: msg = MIMEMultipart() - else: msg = email_text + msg = MIMEMultipart() msg['Subject'] = Header(ustr(subject), 'utf-8') msg['From'] = email_from @@ -522,8 +525,16 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non for key, value in x_headers.iteritems(): msg['%s' % key] = str(value) - if attach: + if html2text and subtype == 'html': + text = html2text(email_body.decode('utf-8')).encode('utf-8') + alternative_part = MIMEMultipart(_subtype="alternative") + alternative_part.attach(MIMEText(text, _charset='utf-8', _subtype='plain')) + alternative_part.attach(email_text) + msg.attach(alternative_part) + else: msg.attach(email_text) + + if attach: for (fname,fcontent) in attach: part = MIMEBase('application', "octet-stream") part.set_payload( fcontent )