From 85beba204f0a2e39b43eebf3a237f9e5da280413 Mon Sep 17 00:00:00 2001 From: David Date: Thu, 2 Aug 2018 10:53:59 +0200 Subject: [PATCH] [FIX] mail_tracking_mailgun: alternative domain - In case the sending domain is different from the one configured in the mail.domain.catchall setting. --- mail_tracking_mailgun/README.rst | 2 ++ mail_tracking_mailgun/__manifest__.py | 2 +- .../i18n/mail_tracking_mailgun.pot | 18 +++++++++--------- .../models/mail_tracking_email.py | 8 +++++--- mail_tracking_mailgun/models/res_partner.py | 3 ++- mail_tracking_mailgun/tests/test_mailgun.py | 12 +++++++++--- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/mail_tracking_mailgun/README.rst b/mail_tracking_mailgun/README.rst index 3b83516..67eb427 100644 --- a/mail_tracking_mailgun/README.rst +++ b/mail_tracking_mailgun/README.rst @@ -36,6 +36,8 @@ parameters: domain. - `mailgun.api_url`: It should be fine as it is, but it could change in the future. +- `mailgun.domain`: In case your sending domain is different from the one + configured in `mail.catchall.domain`. - `mailgun.validation_key`: If you want to be able to check mail address validity you must config this parameter with your account Public Validation Key. diff --git a/mail_tracking_mailgun/__manifest__.py b/mail_tracking_mailgun/__manifest__.py index 5fdc44b..36f3dc1 100644 --- a/mail_tracking_mailgun/__manifest__.py +++ b/mail_tracking_mailgun/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Mail tracking for Mailgun", "summary": "Mail tracking and Mailgun webhooks integration", - "version": "11.0.1.0.3", + "version": "11.0.1.1.2", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, " diff --git a/mail_tracking_mailgun/i18n/mail_tracking_mailgun.pot b/mail_tracking_mailgun/i18n/mail_tracking_mailgun.pot index 791baaf..a6fd010 100644 --- a/mail_tracking_mailgun/i18n/mail_tracking_mailgun.pot +++ b/mail_tracking_mailgun/i18n/mail_tracking_mailgun.pot @@ -14,25 +14,25 @@ msgstr "" "Plural-Forms: \n" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/res_partner.py:88 +#: code:addons/mail_tracking_mailgun/models/res_partner.py:89 #, python-format msgid "%s couldn't be verified. Either the request couln't be completed or the mailbox provider doesn't support email verification" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/res_partner.py:78 +#: code:addons/mail_tracking_mailgun/models/res_partner.py:79 #, python-format msgid "%s failed the mailbox verification. Please check it in order to avoid sending issues" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/res_partner.py:69 +#: code:addons/mail_tracking_mailgun/models/res_partner.py:70 #, python-format msgid "%s is not a valid email address. Please check it in order to avoid sending issues" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75 +#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:76 #, python-format msgid "A Mailgun domain value is needed!" msgstr "" @@ -53,7 +53,7 @@ msgid "Contact" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:238 +#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:240 #, python-format msgid "Couldn't retrieve Mailgun information" msgstr "" @@ -67,13 +67,13 @@ msgid "Email has been bounced: %s\n" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/res_partner.py:56 +#: code:addons/mail_tracking_mailgun/models/res_partner.py:57 #, python-format msgid "Error %s trying to check mailof connection" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:242 +#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:244 #, python-format msgid "Event information not longer stored" msgstr "" @@ -94,7 +94,7 @@ msgid "Mailgun" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/res_partner.py:63 +#: code:addons/mail_tracking_mailgun/models/res_partner.py:64 #, python-format msgid "Mailgun Error. Mailbox verification value wasn't returned" msgstr "" @@ -121,7 +121,7 @@ msgid "There is no Mailgun API key!" msgstr "" #. module: mail_tracking_mailgun -#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:225 +#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:227 #, python-format msgid "There is no tracked message!" msgstr "" diff --git a/mail_tracking_mailgun/models/mail_tracking_email.py b/mail_tracking_mailgun/models/mail_tracking_email.py index 6486396..f396557 100644 --- a/mail_tracking_mailgun/models/mail_tracking_email.py +++ b/mail_tracking_mailgun/models/mail_tracking_email.py @@ -64,13 +64,14 @@ class MailTrackingEmail(models.Model): digestmod=hashlib.sha256).hexdigest() def _mailgun_values(self): - icp = self.env['ir.config_parameter'] + icp = self.env['ir.config_parameter'].sudo() api_key = icp.get_param('mailgun.apikey') if not api_key: raise ValidationError(_('There is no Mailgun API key!')) api_url = icp.get_param( 'mailgun.api_url', 'https://api.mailgun.net/v3') - domain = icp.get_param('mail.catchall.domain') + catchall_domain = icp.get_param('mail.catchall.domain') + domain = icp.get_param('mailgun.domain', catchall_domain) if not domain: raise ValidationError(_('A Mailgun domain value is needed!')) validation_key = icp.get_param('mailgun.validation_key') @@ -78,7 +79,8 @@ class MailTrackingEmail(models.Model): def _mailgun_signature_verify(self, event): event = event or {} - api_key = self.env['ir.config_parameter'].get_param('mailgun.apikey') + icp = self.env['ir.config_parameter'].sudo() + api_key = icp.get_param('mailgun.apikey') if not api_key: _logger.warning("No Mailgun api key configured. " "Please add 'mailgun.apikey' to System parameters " diff --git a/mail_tracking_mailgun/models/res_partner.py b/mail_tracking_mailgun/models/res_partner.py index c3cf016..ece4efe 100644 --- a/mail_tracking_mailgun/models/res_partner.py +++ b/mail_tracking_mailgun/models/res_partner.py @@ -46,7 +46,8 @@ class ResPartner(models.Model): ' in order to be able to check mails validity')) for partner in self.filtered('email'): res = requests.get( - "%s/address/validate" % api_url, + # Validation API url is always the same + 'https://api.mailgun.net/v3/address/validate', auth=("api", validation_key), params={ "address": partner.email, "mailbox_verification": True, diff --git a/mail_tracking_mailgun/tests/test_mailgun.py b/mail_tracking_mailgun/tests/test_mailgun.py index db4a98b..7230ce9 100644 --- a/mail_tracking_mailgun/tests/test_mailgun.py +++ b/mail_tracking_mailgun/tests/test_mailgun.py @@ -104,6 +104,11 @@ class TestMailgun(TransactionCase): self.test_event_delivered() with self.assertRaises(ValidationError): self.env['mail.tracking.email']._mailgun_values() + # now we set an specific domain for Mailgun: + # i.e: we configure new EU zone without loosing old domain statistics + self.env['ir.config_parameter'].set_param( + 'mailgun.domain', 'eu.example.com') + self.test_event_delivered() @mute_logger('odoo.addons.mail_tracking_mailgun.models' '.mail_tracking_email') @@ -169,9 +174,10 @@ class TestMailgun(TransactionCase): response = self.env['mail.tracking.email'].event_process( None, self.event, self.metadata) self.assertEqual('OK', response) - event = self.event_search('delivered') - self.assertEqual(event.timestamp, float(self.timestamp)) - self.assertEqual(event.recipient, self.recipient) + events = self.event_search('delivered') + for event in events: + self.assertEqual(event.timestamp, float(self.timestamp)) + self.assertEqual(event.recipient, self.recipient) # https://documentation.mailgun.com/user_manual.html#tracking-opens def test_event_opened(self):