From b9cbb48ca3739e22f99a46e646f331ba03d9cd5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 21 Mar 2014 18:21:39 +0100 Subject: [IMP] mass_mailing: improved send_mail method (WIP). Also added first fradt of adding an unsubscribe link in the sent emails. Added a controller managing this unsubscription. It is based on model, res_id and mailing_id, allowing to find the customer / lead / contact; but the email is added in the link to avoid allowing people unsubscribing random people using res_id generation. bzr revid: tde@openerp.com-20140321172139-sak10zs2g31xj0t4 --- addons/mass_mailing/controllers/main.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'addons/mass_mailing/controllers/main.py') diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 046084621c7..536fa3215c6 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -2,10 +2,36 @@ from openerp import http, SUPERUSER_ID from openerp.http import request + class MassMailController(http.Controller): + @http.route('/mail/track//blank.gif', type='http', auth='none') def track_mail_open(self, mail_id): + print 'tracking', mail_id """ Email tracking. """ mail_mail_stats = request.registry.get('mail.mail.statistics') mail_mail_stats.set_opened(request.cr, SUPERUSER_ID, mail_mail_ids=[mail_id]) return "data:image/gif;base64,R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" + + @http.route(['/mail/mailing//unsubscribe'], type='http', auth='none') + def mailing(self, mailing_id, email=None, model=None, res_id=None, **post): + cr, uid, context = request.cr, request.uid, request.context + print 'unsubscribing from', mailing_id, email, model, res_id + MassMailing = request.registry['mail.mass_mailing'] + # check model is valid + # ... + mailing_ids = MassMailing.exists(cr, SUPERUSER_ID, [mailing_id], context=context) + if not mailing_ids: + print 'wrroooooong' + return '' + if model == 'res.partner': + partner_ids = request.registry[model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email', 'ilike', email)], context=context) + print 'Setting partner_ids', partner_ids, 'as opt out' + # request.registry[model].write(cr, SUPERUSER_ID, partner_ids, {'opt_out': True}, context=context) + else: + mailing = MassMailing.browse(cr, SUPERUSER_ID, mailing_ids[0], context=context) + list_ids = [l.id for l in mailing.contact_list_ids] + res_ids = request.registry[model].search(cr, SUPERUSER_ID, [('list_id', 'in', list_ids), ('id', '=', res_id), ('email', 'ilike', email)], context=context) + print 'Setting contacts', res_ids, 'as opt out' + # request.registry[model].write(cr, SUPERUSER_ID, res_ids, {'opt_out': True}, context=context) + return '' -- cgit v1.2.3 From 38541d8d2d54b82c085377d6eca4333796031fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 25 Mar 2014 16:41:14 +0100 Subject: [IMP] mass_mailing: cleaned and fixed mass mailing.send_all + added an onverride of the controller to be able to unsubscribe from leads. bzr revid: tde@openerp.com-20140325154114-er4o489y3w3ng10f --- addons/mass_mailing/controllers/main.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'addons/mass_mailing/controllers/main.py') diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 536fa3215c6..3536d075015 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -14,24 +14,18 @@ class MassMailController(http.Controller): return "data:image/gif;base64,R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" @http.route(['/mail/mailing//unsubscribe'], type='http', auth='none') - def mailing(self, mailing_id, email=None, model=None, res_id=None, **post): + def mailing(self, mailing_id, email=None, res_id=None, **post): cr, uid, context = request.cr, request.uid, request.context - print 'unsubscribing from', mailing_id, email, model, res_id MassMailing = request.registry['mail.mass_mailing'] - # check model is valid - # ... mailing_ids = MassMailing.exists(cr, SUPERUSER_ID, [mailing_id], context=context) if not mailing_ids: - print 'wrroooooong' - return '' - if model == 'res.partner': - partner_ids = request.registry[model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email', 'ilike', email)], context=context) - print 'Setting partner_ids', partner_ids, 'as opt out' - # request.registry[model].write(cr, SUPERUSER_ID, partner_ids, {'opt_out': True}, context=context) - else: - mailing = MassMailing.browse(cr, SUPERUSER_ID, mailing_ids[0], context=context) + return 'KO' + mailing = MassMailing.browse(cr, SUPERUSER_ID, mailing_ids[0], context=context) + if mailing.mailing_model == 'mail.mass_mailing.contact': list_ids = [l.id for l in mailing.contact_list_ids] - res_ids = request.registry[model].search(cr, SUPERUSER_ID, [('list_id', 'in', list_ids), ('id', '=', res_id), ('email', 'ilike', email)], context=context) - print 'Setting contacts', res_ids, 'as opt out' - # request.registry[model].write(cr, SUPERUSER_ID, res_ids, {'opt_out': True}, context=context) - return '' + record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('list_id', 'in', list_ids), ('id', '=', res_id), ('email', 'ilike', email)], context=context) + request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) + else: + record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email', 'ilike', email)], context=context) + request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) + return 'OK' -- cgit v1.2.3 From bd9e3bc538c80309866058a51e8aa00cfb3d4977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 28 Mar 2014 14:20:07 +0100 Subject: [FIX] mass_mailing: make the tracking controller effectively return an image -_- bzr revid: tde@openerp.com-20140328132007-jbcmxcu9g35ct7gk --- addons/mass_mailing/controllers/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'addons/mass_mailing/controllers/main.py') diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 3536d075015..5feb142694b 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -1,4 +1,6 @@ +import werkzeug + from openerp import http, SUPERUSER_ID from openerp.http import request @@ -6,12 +8,14 @@ from openerp.http import request class MassMailController(http.Controller): @http.route('/mail/track//blank.gif', type='http', auth='none') - def track_mail_open(self, mail_id): - print 'tracking', mail_id + def track_mail_open(self, mail_id, **post): """ Email tracking. """ mail_mail_stats = request.registry.get('mail.mail.statistics') mail_mail_stats.set_opened(request.cr, SUPERUSER_ID, mail_mail_ids=[mail_id]) - return "data:image/gif;base64,R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" + response = werkzeug.wrappers.Response() + response.mimetype = 'image/gif' + response.set_data('R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='.decode('base64')) + return response @http.route(['/mail/mailing//unsubscribe'], type='http', auth='none') def mailing(self, mailing_id, email=None, res_id=None, **post): -- cgit v1.2.3 From 4336c64a7c5ddfe1a185a2b683b6fe47122f9d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 16 Apr 2014 10:28:51 +0200 Subject: [IMP] mail, mass_mailing: using a _mail_mass_mailing class attribute it is now possible to compute models allowing mass mailing using mass_mailing_campaign module. This allows to completely remove the bridges modules, using a more generic controller for unsubscription. bzr revid: tde@openerp.com-20140416082851-8duo6yrwr5hwd8c2 --- addons/mass_mailing/controllers/main.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'addons/mass_mailing/controllers/main.py') diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 5feb142694b..7396c02d453 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -30,6 +30,13 @@ class MassMailController(http.Controller): record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('list_id', 'in', list_ids), ('id', '=', res_id), ('email', 'ilike', email)], context=context) request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) else: - record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email', 'ilike', email)], context=context) - request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) + email_fname = None + if 'email_from' in request.registry[mailing.mailing_model]._all_columns: + email_fname = 'email_from' + elif 'email' in request.registry[mailing.mailing_model]._all_columns: + email_fname = 'email' + if email_fname: + record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), (email_fname, 'ilike', email)], context=context) + if 'opt_out' in request.registry[mailing.mailing_model]._all_columns: + request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) return 'OK' -- cgit v1.2.3