[FIX] mail_tracking_mailgun: alternative domain

- In case the sending domain is different from the one configured in the
mail.domain.catchall setting.
This commit is contained in:
David 2018-08-02 10:53:59 +02:00 committed by nicolas
parent bf4687c4bb
commit 85beba204f
6 changed files with 28 additions and 17 deletions

View File

@ -36,6 +36,8 @@ parameters:
domain. domain.
- `mailgun.api_url`: It should be fine as it is, but it could change in the - `mailgun.api_url`: It should be fine as it is, but it could change in the
future. 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 - `mailgun.validation_key`: If you want to be able to check mail address
validity you must config this parameter with your account Public Validation validity you must config this parameter with your account Public Validation
Key. Key.

View File

@ -6,7 +6,7 @@
{ {
"name": "Mail tracking for Mailgun", "name": "Mail tracking for Mailgun",
"summary": "Mail tracking and Mailgun webhooks integration", "summary": "Mail tracking and Mailgun webhooks integration",
"version": "11.0.1.0.3", "version": "11.0.1.1.2",
"category": "Social Network", "category": "Social Network",
"website": "https://github.com/OCA/social", "website": "https://github.com/OCA/social",
"author": "Tecnativa, " "author": "Tecnativa, "

View File

@ -14,25 +14,25 @@ msgstr ""
"Plural-Forms: \n" "Plural-Forms: \n"
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "%s couldn't be verified. Either the request couln't be completed or the mailbox provider doesn't support email verification" msgid "%s couldn't be verified. Either the request couln't be completed or the mailbox provider doesn't support email verification"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "%s failed the mailbox verification. Please check it in order to avoid sending issues" msgid "%s failed the mailbox verification. Please check it in order to avoid sending issues"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "%s is not a valid email address. Please check it in order to avoid sending issues" msgid "%s is not a valid email address. Please check it in order to avoid sending issues"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "A Mailgun domain value is needed!" msgid "A Mailgun domain value is needed!"
msgstr "" msgstr ""
@ -53,7 +53,7 @@ msgid "Contact"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "Couldn't retrieve Mailgun information" msgid "Couldn't retrieve Mailgun information"
msgstr "" msgstr ""
@ -67,13 +67,13 @@ msgid "Email has been bounced: %s\n"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "Error %s trying to check mailof connection" msgid "Error %s trying to check mailof connection"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "Event information not longer stored" msgid "Event information not longer stored"
msgstr "" msgstr ""
@ -94,7 +94,7 @@ msgid "Mailgun"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "Mailgun Error. Mailbox verification value wasn't returned" msgid "Mailgun Error. Mailbox verification value wasn't returned"
msgstr "" msgstr ""
@ -121,7 +121,7 @@ msgid "There is no Mailgun API key!"
msgstr "" msgstr ""
#. module: mail_tracking_mailgun #. 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 #, python-format
msgid "There is no tracked message!" msgid "There is no tracked message!"
msgstr "" msgstr ""

View File

@ -64,13 +64,14 @@ class MailTrackingEmail(models.Model):
digestmod=hashlib.sha256).hexdigest() digestmod=hashlib.sha256).hexdigest()
def _mailgun_values(self): def _mailgun_values(self):
icp = self.env['ir.config_parameter'] icp = self.env['ir.config_parameter'].sudo()
api_key = icp.get_param('mailgun.apikey') api_key = icp.get_param('mailgun.apikey')
if not api_key: if not api_key:
raise ValidationError(_('There is no Mailgun API key!')) raise ValidationError(_('There is no Mailgun API key!'))
api_url = icp.get_param( api_url = icp.get_param(
'mailgun.api_url', 'https://api.mailgun.net/v3') '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: if not domain:
raise ValidationError(_('A Mailgun domain value is needed!')) raise ValidationError(_('A Mailgun domain value is needed!'))
validation_key = icp.get_param('mailgun.validation_key') validation_key = icp.get_param('mailgun.validation_key')
@ -78,7 +79,8 @@ class MailTrackingEmail(models.Model):
def _mailgun_signature_verify(self, event): def _mailgun_signature_verify(self, event):
event = event or {} 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: if not api_key:
_logger.warning("No Mailgun api key configured. " _logger.warning("No Mailgun api key configured. "
"Please add 'mailgun.apikey' to System parameters " "Please add 'mailgun.apikey' to System parameters "

View File

@ -46,7 +46,8 @@ class ResPartner(models.Model):
' in order to be able to check mails validity')) ' in order to be able to check mails validity'))
for partner in self.filtered('email'): for partner in self.filtered('email'):
res = requests.get( 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={ auth=("api", validation_key), params={
"address": partner.email, "address": partner.email,
"mailbox_verification": True, "mailbox_verification": True,

View File

@ -104,6 +104,11 @@ class TestMailgun(TransactionCase):
self.test_event_delivered() self.test_event_delivered()
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
self.env['mail.tracking.email']._mailgun_values() 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' @mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email') '.mail_tracking_email')
@ -169,9 +174,10 @@ class TestMailgun(TransactionCase):
response = self.env['mail.tracking.email'].event_process( response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata) None, self.event, self.metadata)
self.assertEqual('OK', response) self.assertEqual('OK', response)
event = self.event_search('delivered') events = self.event_search('delivered')
self.assertEqual(event.timestamp, float(self.timestamp)) for event in events:
self.assertEqual(event.recipient, self.recipient) self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
# https://documentation.mailgun.com/user_manual.html#tracking-opens # https://documentation.mailgun.com/user_manual.html#tracking-opens
def test_event_opened(self): def test_event_opened(self):