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 )